【问题标题】:Save file to Document directory in liferay 6.1 using API使用 API 将文件保存到 liferay 6.1 中的 Document 目录
【发布时间】:2013-07-28 23:04:50
【问题描述】:

我需要从 web-form portlet 将上传的文件保存在 Liferay 中 Document & Media 文件夹的子目录中。
我已经扩展了 Web 表单 portlet 来执行此操作,但文件已成功上传到数据库中,而不是文档和媒体文件夹中。
我尝试使用以下代码将文件上传到文档目录中,但没有成功,请帮忙。

ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);

String title = file.getName();

DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(themeDisplay.getScopeGroupId(), 0, "Test");

ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(),actionRequest);

Map<String, Fields> fieldsMap = new HashMap<String, Fields>();

long fileEntryTypeId = DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT;

FileInputStream inputStream = new FileInputStream(file);

DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.addFileEntry(themeDisplay.getUserId(), 10153, dlFolder.getRepositoryId(), 
                            dlFolder.getRepositoryId(), title, file.getContentType(), title, "fileDesc", "sss",
                            fileEntryTypeId, fieldsMap, file, inputStream, file.length(), serviceContext);

inputStream.close();

DLFileEntryLocalServiceUtil.updateFileEntry(themeDisplay.getUserId(), dlFileEntry.getFileEntryId(), title, file.getContentType(),
        title, "fileDesc", "comment", true, dlFileEntry.getFileEntryTypeId(), fieldsMap, file, null, file.length(), serviceContext);

【问题讨论】:

  • 这甚至不能编译-重复使用file,我在docs.liferay.com/portal/6.1/javadocs-all/com/liferay/portlet/…中找不到DLFileEntryLocalServiceUtil的这个接口。请检查
  • 嗨奥拉夫感谢您的回复。我是 liferay 的新手。我已经编辑了我的查询,请您看一下。谢谢
  • file 这里是什么数据类型?我有类似的问题,但至少对于java.io.File,我没有一个名为getContentType() 的方法。
  • 另外,groupId 10153 指的是什么?我不知道在那里输入什么。

标签: file upload liferay liferay-6


【解决方案1】:

试试这个代码sn-p

ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest);

File file = uploadRequest.getFile("file");
String contentType = MimeTypesUtil.getContentType(file);

InputStream inputStream  = new FileInputStream(file);

Folder folderName = DLAppLocalServiceUtil.getFolder(parentRepositoryId, 
                                                    parentFolderId, 
                                                    "Folder Name");
long folderId = folderName.getFolderId();
long repositoryId = folderName.getRepositoryId();

FileEntry fileEntry = DLAppLocalServiceUtil.addFileEntry(themeDisplay.getUserId(), 
                                                         repositoryId, 
                                                         folderId, 
                                                         file.getName(), 
                                                         contentType, 
                                                         "File Name", 
                                                         "description", 
                                                         "changeLog", 
                                                         inputStream, 
                                                         file.length(), 
                                                         serviceContext);

【讨论】:

  • parentRepositoryIdparentFolderId 是什么?如果有用户的主文件夹或类似的东西,我想以用户身份上传文件。
【解决方案2】:

我知道这是一个老问题,但我今天遇到了类似的问题。我使用了DLFileEntryLocalServiceUtil,并且必须同时调用addFileEntry()updateFileEntry() 才能正确创建资产。

Liferay DLFileEntryLocalServiceUtil.addFileEntry does not create AssetEntry record

【讨论】:

    猜你喜欢
    • 2019-06-21
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多