以编程方式将图像添加到Liferay文档库版本6.1

时间:2013-06-09 11:36:08

标签: liferay liferay-6

在Liferay6.1中我想以编程方式将图像添加到文档库中吗?

这是我想要通过它将图像添加到文档库中的主要方法:

public class ImgGallery {
    public static void main(String[] args) throws SystemException, FileNotFoundException {
        byte[] bytes = new byte[0];
        File srcfile = new File("C:\\Users\\my-pc\\Pictures\\extra\\myPhoto.jpg");
        InputStream in = new FileInputStream(srcfile);
        long repositoryId = 10180;
        long folderId = 10651;
        Map<String, Fields> fieldsMap = new HashMap<String, Fields>();
        DLFileEntryLocalServiceUtil.addFileEntry(
              10196, repositoryId, repositoryId, folderId,
              "filename", MimeTypesUtil.getContentType("behnaz.jpg"),
              "title", "description", "changeLog", 0, fieldsMap,
              srcfile, null, bytes.length, serviceContext
        );
    }
}

这不起作用 - 我不知道向DLFileEntryLocalServiceUtil.addFileEntry提供什么参数?

2 个答案:

答案 0 :(得分:3)

用于将文件添加到Liferay文档库

您需要一个文件夹,您可以在liferay控制面板中创建它,我的文件夹是TestFolder。您可以使用DLFolderLocalServiceUtil.getFolder搜索它。你需要dlfileentrytypes。我希望我们能从中了解其余部分。您需要添加fileentry,然后需要更新它以获得批准。

ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
File file = uploadRequest.getFile("uploadFile");
DLFileEntry fileEntry = null;
Long lessonId = ParamUtil.getLong(request, "lid");
Lesson lll = LessonLocalServiceUtil.getLesson(lessonId);
String lesName = URLEncoder.encode(lll.getName(themeDisplay.getLocale()));
Date da = new Date();
String ext = FileUtil.getExtension(file.getName());
String dat = new SimpleDateFormat("yyyy-MM-dd").format(da);

String title = lesName + "-" + dat + "." + ext;
long portraitId = themeDisplay.getUser().getPortraitId();
byte[] imageBytes = FileUtil.getBytes(file);
InputStream is = new ByteArrayInputStream(imageBytes);
PortletPreferences preferences = request.getPreferences();
String nameRo=uploadRequest.getParameter("nameRO");
String nameEn=uploadRequest.getParameter("name");

DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(themeDisplay.getScopeGroupId(), 0, "TestFolder");
ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), request);
List<DLFileEntryType> tip = DLFileEntryTypeLocalServiceUtil.getFileEntryTypes(DLUtil.getGroupIds(themeDisplay));

fileEntry = DLFileEntryLocalServiceUtil.addFileEntry(themeDisplay.getUserId(), 
        themeDisplay.getScopeGroupId(), 
        themeDisplay.getScopeGroupId(), 
        dlFolder.getFolderId(), 
        file.getName(),
        MimeTypesUtil.getContentType(file), 
        title, 
        request.getParameter("name"), 
        "", 
        tip.get(0).getFileEntryTypeId(), 
        null, 
        file, 
        is, 
        file.getTotalSpace(), 
        serviceContext);

DLFileEntryLocalServiceUtil.updateFileEntry(
        themeDisplay.getUserId(), 
        fileEntry.getFileEntryId(),
        file.getName(), 
        MimeTypesUtil.getContentType(file), 
        title,
        "", 
        "", 
        true, 
        tip.get(0).getPrimaryKey(), 
        null, 
        file, 
        is,
        file.getTotalSpace(), 
        serviceContext);

编辑: 要访问fileentry下载URL,您可以使用

DLFileEntry dlf = DLFileEntryLocalServiceUtil.getDLFileEntry(f.get(i).getFileEntryId());
<a href='<%=themeDisplay.getPortalURL()+"/c/document_library/get_file?uuid="+DL.getUuid()+"&groupId="+themeDisplay.getScopeGroupId() %>' download>
Download </a>

答案 1 :(得分:1)

您是否尝试从命令行调用此API函数? (正如方法main所暗示的):你不能只启动JVM并调用Liferay API函数,因为还没有初始化。

您需要从Web应用程序调用API函数(尤其是本地服务) - 例如一个portlet或一个钩子 - 这通常不会发生在main方法中。

编辑:看一下被授予的javadoc,这不会给你提供除参数名称以外的许多线索,但是如果你仔细阅读这些并看到implementation,那么一些可能值得尝试/检查的事情:

  • 请确保userId是用户的有效ID。
  • 确保groupIdrepositoryId的值也有效 - 例如它需要是网站的ID。
  • folderId相同:确保它是文件夹的有效ID。对于这个例子,我们不知道你是如何想出这个价值的。
  • 你给出的是大小(bytes.length
  • 的0
  • 我猜你硬编码的文件确实存在?额外额外确保您在文件或文件名中没有拼写错误

如果这不能解决您的问题,请告诉我们您的论点存在哪些确切问题:“我遇到了问题”并不足以提供任何有意义的帮助