diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java index d2daabe9a4da..4778cec279e3 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java @@ -20,8 +20,11 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import javax.xml.parsers.ParserConfigurationException; @@ -60,6 +63,7 @@ import org.dspace.util.FileInfo; import org.dspace.util.FileTreeViewGenerator; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -72,7 +76,6 @@ @Component(MetadataBitstreamWrapperRest.CATEGORY + "." + MetadataBitstreamWrapperRest.NAME) public class MetadataBitstreamRestRepository extends DSpaceRestRepository { private static Logger log = org.apache.logging.log4j.LogManager.getLogger(MetadataBitstreamRestRepository.class); - private final static int MAX_FILE_PREVIEW_COUNT = 1000; @Autowired HandleService handleService; @@ -102,6 +105,10 @@ public class MetadataBitstreamRestRepository extends DSpaceRestRepository findByHandle(@Parameter(value = "handle", required = true) String handle, @Parameter(value = "fileGrpType") String fileGrpType, @@ -345,29 +352,28 @@ public String extractFile(InputStream inputStream, String fileType) { } } + // Is a folder regex + String folderRegex = "/|\\d+"; + Pattern pattern = Pattern.compile(folderRegex); + StringBuilder sb = new StringBuilder(); sb.append(("")); - List allFiles = filePaths; + Iterator iterator = filePaths.iterator(); int fileCounter = 0; - for (String filePath : allFiles) { - if (!filePath.isEmpty() && filePath.length() > 3) { - if (filePath.contains(".")) { - fileCounter++; - } - sb.append(""); - sb.append(filePath); - sb.append(""); - - if (fileCounter > MAX_FILE_PREVIEW_COUNT) { - sb.append(""); - sb.append("/|0"); - sb.append(""); - sb.append(""); - sb.append("...too many files...|0"); - sb.append(""); - break; - } + while ((iterator.hasNext() && fileCounter < maxPreviewCount)) { + String filePath = iterator.next(); + + // Check if the file is a folder + Matcher matcher = pattern.matcher(filePath); + if (!matcher.matches()) { + // It is a file + fileCounter++; } + sb.append("").append(filePath).append(""); + } + + if (fileCounter > maxPreviewCount) { + sb.append("...too many files...|0"); } sb.append(("")); return sb.toString(); diff --git a/dspace/config/clarin-dspace.cfg b/dspace/config/clarin-dspace.cfg index b1a589afd3a9..e3d0b232997e 100644 --- a/dspace/config/clarin-dspace.cfg +++ b/dspace/config/clarin-dspace.cfg @@ -245,6 +245,9 @@ shibboleth.name.conversion.outputEncoding = UTF-8 ### File preview ### # File preview is enabled by default file.preview.enabled = false +# It the ZIP file contains more than 1000 files show only the first 1000 files +file.preview.zip.limit.length = 1000 + ### Storage service ### # Synchronization is NOT enabled by default