protected void testVersionUpdate( String addFileName, byte[] addBytes, String addMimeType, String updateFileName, byte[] updateBytes, String updateMimeType) throws PortalException, SystemException { String description = StringPool.BLANK; String changeLog = StringPool.BLANK; ServiceContext serviceContext = ServiceTestUtil.getServiceContext(group.getGroupId()); FileEntry fileEntry = DLAppServiceUtil.addFileEntry( group.getGroupId(), parentFolder.getFolderId(), addFileName, addMimeType, addFileName, description, changeLog, addBytes, serviceContext); fileEntry = DLAppServiceUtil.updateFileEntry( fileEntry.getFileEntryId(), updateFileName, updateMimeType, updateFileName, description, changeLog, false, updateBytes, serviceContext); FileVersion fileVersion = fileEntry.getFileVersion(); Assert.assertEquals(DLFileEntryConstants.VERSION_DEFAULT, fileVersion.getVersion()); Assert.assertEquals(updateMimeType, fileVersion.getMimeType()); Assert.assertEquals(updateBytes.length, fileVersion.getSize()); Assert.assertEquals(fileVersion.getExtension(), fileEntry.getExtension()); Assert.assertEquals(fileVersion.getMimeType(), fileEntry.getMimeType()); Assert.assertEquals(fileVersion.getSize(), fileEntry.getSize()); }
@Override public long getSize() { FileEntry fileEntry = getModel(); try { FileVersion fileVersion = fileEntry.getLatestFileVersion(); return fileVersion.getSize(); } catch (Exception e) { return fileEntry.getSize(); } }
@Override public boolean isPreviewableSize(FileVersion fileVersion) { long fileEntryPreviewableProcessorMaxSize = PropsValues.DL_FILE_ENTRY_PREVIEWABLE_PROCESSOR_MAX_SIZE; try { fileEntryPreviewableProcessorMaxSize = PrefsPropsUtil.getLong(PropsKeys.DL_FILE_ENTRY_PREVIEWABLE_PROCESSOR_MAX_SIZE); } catch (Exception e) { _log.error(e, e); } if (fileEntryPreviewableProcessorMaxSize == 0) { return false; } if ((fileEntryPreviewableProcessorMaxSize > 0) && (fileVersion.getSize() > fileEntryPreviewableProcessorMaxSize)) { return false; } return true; }
protected void sendFile( HttpServletRequest request, HttpServletResponse response, User user, String[] pathArray) throws Exception { // Retrieve file details FileEntry fileEntry = getFileEntry(pathArray); if (fileEntry == null) { throw new NoSuchFileEntryException(); } String version = ParamUtil.getString(request, "version"); if (Validator.isNull(version)) { if (Validator.isNotNull(fileEntry.getVersion())) { version = fileEntry.getVersion(); } } String tempFileId = DLUtil.getTempFileId(fileEntry.getFileEntryId(), version); FileVersion fileVersion = fileEntry.getFileVersion(version); String fileName = fileVersion.getTitle(); String extension = fileVersion.getExtension(); if (Validator.isNotNull(extension) && !fileName.endsWith(StringPool.PERIOD + extension)) { fileName += StringPool.PERIOD + extension; } // Handle requested conversion boolean converted = false; String targetExtension = ParamUtil.getString(request, "targetExtension"); int imageThumbnail = ParamUtil.getInteger(request, "imageThumbnail"); int documentThumbnail = ParamUtil.getInteger(request, "documentThumbnail"); int previewFileIndex = ParamUtil.getInteger(request, "previewFileIndex"); boolean audioPreview = ParamUtil.getBoolean(request, "audioPreview"); boolean imagePreview = ParamUtil.getBoolean(request, "imagePreview"); boolean videoPreview = ParamUtil.getBoolean(request, "videoPreview"); int videoThumbnail = ParamUtil.getInteger(request, "videoThumbnail"); InputStream inputStream = null; long contentLength = 0; if ((imageThumbnail > 0) && (imageThumbnail <= 3)) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(ImageProcessorUtil.getThumbnailType(fileVersion)); int thumbnailIndex = imageThumbnail - 1; inputStream = ImageProcessorUtil.getThumbnailAsStream(fileVersion, thumbnailIndex); contentLength = ImageProcessorUtil.getThumbnailFileSize(fileVersion, thumbnailIndex); converted = true; } else if ((documentThumbnail > 0) && (documentThumbnail <= 3)) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(PDFProcessor.THUMBNAIL_TYPE); int thumbnailIndex = documentThumbnail - 1; inputStream = PDFProcessorUtil.getThumbnailAsStream(fileVersion, thumbnailIndex); contentLength = PDFProcessorUtil.getThumbnailFileSize(fileVersion, thumbnailIndex); converted = true; } else if (previewFileIndex > 0) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(PDFProcessor.PREVIEW_TYPE); inputStream = PDFProcessorUtil.getPreviewAsStream(fileVersion, previewFileIndex); contentLength = PDFProcessorUtil.getPreviewFileSize(fileVersion, previewFileIndex); converted = true; } else if (audioPreview || videoPreview) { String type = ParamUtil.getString(request, "type"); fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(type); if (audioPreview) { inputStream = AudioProcessorUtil.getPreviewAsStream(fileVersion, type); contentLength = AudioProcessorUtil.getPreviewFileSize(fileVersion, type); } else { inputStream = VideoProcessorUtil.getPreviewAsStream(fileVersion, type); contentLength = VideoProcessorUtil.getPreviewFileSize(fileVersion, type); } converted = true; } else if (imagePreview) { String type = ImageProcessorUtil.getPreviewType(fileVersion); fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(type); inputStream = ImageProcessorUtil.getPreviewAsStream(fileVersion); contentLength = ImageProcessorUtil.getPreviewFileSize(fileVersion); converted = true; } else if ((videoThumbnail > 0) && (videoThumbnail <= 3)) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(VideoProcessor.THUMBNAIL_TYPE); int thumbnailIndex = videoThumbnail - 1; inputStream = VideoProcessorUtil.getThumbnailAsStream(fileVersion, thumbnailIndex); contentLength = VideoProcessorUtil.getThumbnailFileSize(fileVersion, thumbnailIndex); converted = true; } else { inputStream = fileVersion.getContentStream(true); contentLength = fileVersion.getSize(); if (Validator.isNotNull(targetExtension)) { File convertedFile = DocumentConversionUtil.convert(tempFileId, inputStream, extension, targetExtension); if (convertedFile != null) { fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(targetExtension); inputStream = new FileInputStream(convertedFile); contentLength = convertedFile.length(); converted = true; } } } // Determine proper content type String contentType = null; if (converted) { contentType = MimeTypesUtil.getContentType(fileName); } else { contentType = fileVersion.getMimeType(); } // Support range HTTP header response.setHeader(HttpHeaders.ACCEPT_RANGES, HttpHeaders.ACCEPT_RANGES_BYTES_VALUE); List<Range> ranges = null; try { ranges = ServletResponseUtil.getRanges(request, response, contentLength); } catch (IOException ioe) { if (_log.isErrorEnabled()) { _log.error(ioe); } response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + contentLength); response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); return; } if ((ranges == null) || ranges.isEmpty()) { ServletResponseUtil.sendFile( request, response, fileName, inputStream, contentLength, contentType); } else { if (_log.isDebugEnabled()) { _log.debug("Request has range header " + request.getHeader(HttpHeaders.RANGE)); } ServletResponseUtil.write( request, response, fileName, ranges, inputStream, contentLength, contentType); } }
protected void getFile( long fileEntryId, long folderId, String name, String title, String version, long fileShortcutId, String uuid, long groupId, String targetExtension, HttpServletRequest request, HttpServletResponse response) throws Exception { if (name.startsWith("DLFE-")) { name = name.substring(5); } name = FileUtil.stripExtension(name); FileEntry fileEntry = null; if (Validator.isNotNull(uuid) && (groupId > 0)) { fileEntry = DLAppServiceUtil.getFileEntryByUuidAndGroupId(uuid, groupId); folderId = fileEntry.getFolderId(); } if (fileEntryId > 0) { fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId); } else if (fileShortcutId <= 0) { if (Validator.isNotNull(title)) { fileEntry = DLAppServiceUtil.getFileEntry(groupId, folderId, title); } else if (Validator.isNotNull(name)) { DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.fetchFileEntryByName(groupId, folderId, name); if (dlFileEntry == null) { // LPS-30374 List<DLFileEntry> dlFileEntries = DLFileEntryLocalServiceUtil.getFileEntries(folderId, name); if (!dlFileEntries.isEmpty()) { dlFileEntry = dlFileEntries.get(0); } } if (dlFileEntry != null) { ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); PermissionChecker permissionChecker = themeDisplay.getPermissionChecker(); DLFileEntryPermission.check(permissionChecker, dlFileEntry, ActionKeys.VIEW); fileEntry = new LiferayFileEntry(dlFileEntry); } } } else { DLFileShortcut fileShortcut = DLAppServiceUtil.getFileShortcut(fileShortcutId); fileEntryId = fileShortcut.getToFileEntryId(); fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId); } if (Validator.isNull(version)) { if ((fileEntry != null) && Validator.isNotNull(fileEntry.getVersion())) { version = fileEntry.getVersion(); } else { throw new NoSuchFileEntryException(); } } FileVersion fileVersion = fileEntry.getFileVersion(version); InputStream is = fileVersion.getContentStream(true); String fileName = fileVersion.getTitle(); long contentLength = fileVersion.getSize(); String contentType = fileVersion.getMimeType(); if (Validator.isNotNull(targetExtension)) { String id = DLUtil.getTempFileId(fileEntry.getFileEntryId(), version); String sourceExtension = fileVersion.getExtension(); if (!fileName.endsWith(StringPool.PERIOD + sourceExtension)) { fileName += StringPool.PERIOD + sourceExtension; } File convertedFile = DocumentConversionUtil.convert(id, is, sourceExtension, targetExtension); if (convertedFile != null) { fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(targetExtension); is = new FileInputStream(convertedFile); contentLength = convertedFile.length(); contentType = MimeTypesUtil.getContentType(fileName); } } ServletResponseUtil.sendFile(request, response, fileName, is, contentLength, contentType); }