- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在开发 Liferay portlet 时,有时您想要使用文件工件。例如,您可能想要一个可配置的图像,或者让用户将文件附加到您的自定义服务实体的方法。
Liferay 中内置了几个 API 来解决这个问题。如何使用它们?
最佳答案
以下是我能想到的三种存储和检索文件的方法。
存储空间:
使用 DLStoreUtil
的方法正如您在 question 中显示的那样.
检索:
为此,您需要将文件作为流获取,然后使用以下代码将其发送到浏览器:
String path = fileName;
// if there is a directory then path would be
// String path = "mydirectory/mySubDirectory/" + fileName; // mydirectory/mySubDirectory/my_File_image_name.png
InputStream inputStream = DLStoreUtil.getFileAsStream(companyId(), CompanyConstants.SYSTEM, path);
long contentLength = DLStoreUtil.getFileSize(companyId(), CompanyConstants.SYSTEM, path);
String contentType = MimeTypesUtil.getContentType(fileName);
ServletResponseUtil.sendFile(request, response, fileName, inputStream, contentLength, contentType);
Liferay 使用上述方法为其 Message Boards
下载附件组件。您可以查看源代码 here .我没有试过这个,但我想你可以在 serveResource
中编写这段代码方法,然后提供 resourceURL
作为在 <img>
中下载或使用它的 URL标签。
DLAppService
如果您使用此方法,DLFileEntry
中将有一个数据库条目此文件的表以及该文件将出现在 Documents & Media
中组件。
存储空间:
添加文件的示例代码:
FileEntry = DLAppServiceUtil.addFileEntry(repositoryId, folderId, sourceFileName, mimeType, title, description, changeLog, bytes, serviceContext);
您可以查看其他方法和类 here .
检索:
正如本 answer 中所解释的那样.
ImageLocalService
(专门针对图像)对于此方法,您需要将 ImageID 存储在某处以供以后检索图像。
存储空间:
下面是在liferay中添加/更新Image的方法:
// to Add an image
long imageID = 0;
imageID = CounterLocalServiceUtil.increment();
ImageLocalServiceUtil.updateImage(imageID, bytes);
// to update the same image, pass the existing Image ID
ImageLocalServiceUtil.updateImage(existingImageID, bytes);
检索:
您可以在您的 JSP 中编写以下代码:
<img alt="My Image"
id="myImgID"
title="This my image stored in liferay"
src="<%=themeDisplay.getPathImage()%>/any_string_will_do_?img_id=<%=myImageId%>&img_timestamp=<%=someTimestampOrRandomString %>" />
注意: img_timestamp=<%=someTimestampOrRandomString %>"
, 这个字符串是一个可选参数 & 可以跳过。
这是为了让浏览器在每次刷新页面时从服务器而不是浏览器缓存中检索图像。
希望这对您有所帮助。
关于liferay-6 - 我如何在 Liferay 中使用不同的文件存储和检索 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903778/
我是一名优秀的程序员,十分优秀!