gpt4 book ai didi

liferay-6 - 我如何在 Liferay 中使用不同的文件存储和检索 API?

转载 作者:行者123 更新时间:2023-12-01 11:49:25 24 4
gpt4 key购买 nike

在开发 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com