在porltet Liferay上传图像

时间:2013-11-14 13:52:14

标签: image liferay file-io

我正在做一个portlet来创建横幅。我喜欢我使用以下内容创建表单:输入类型=“文件”和表单 nctype ='multipart / form-data'

在processAction中我获取了图像,但我不知道如何将它保存在服务器中,因为我只在临时实例portlet中保存,但是如果我重新启动服务器,则会丢失图像。

这是我保存图片的代码:

    private boolean uploadFile( ActionRequest request, ActionResponse response) throws ValidatorException, IOException, ReadOnlyException {
    try {
        // Si la request es del tipo multipart ...
        if (PortletFileUpload.isMultipartContent(request)) {
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            PortletFileUpload servletFileUpload = new PortletFileUpload(diskFileItemFactory);
            servletFileUpload.setSizeMax(81920); // bytes
            List fileItemsList = servletFileUpload.parseRequest(request);
            Iterator it = fileItemsList.iterator();

        while (it.hasNext()){
            FileItem fileItem = (FileItem)it.next();
            if (fileItem.isFormField()){
            }
            else{
                String nombreCampo = fileItem.getFieldName();
                String nombreArchivo = fileItem.getName();
                String extension = nombreArchivo.substring(nombreArchivo.indexOf("."));             
                PortletContext context = request.getPortletSession().getPortletContext();
                String path = context.getRealPath("/images");                   
                File archivo = new File(path + "/" + nombreArchivo);
                PortletContext pc = request.getPortletSession().getPortletContext();
                fileItem.write(archivo);
            } 
        } 
    }
    } catch (Exception e) {}
    return true;
}

我不知道我做错了什么,或者这不是正确的方法。 有什么想法吗?

提前致谢

修改 最后,我尝试使用DLFolderLocalServiceUtil和DLFileEntryLocalServiceUtil,但它无法正常工作。当我加载页面时,您可以看到图像,但在页面完全加载后,图像消失。 我不知道是不是因为我没有创建fileEntry或url是错误的。 这是我的代码:

long folderId = CounterLocalServiceUtil.increment(DLFolder.class.getName());
DLFolder folder = DLFolderLocalServiceUtil.createDLFolder(folderId);
long userId = themeDisplay.getUserId();
long groupId = themeDisplay.getScopeGroupId();
folder.setUserId(userId);
folder.setGroupId(groupId);
folder.setName("Banner image " + nombreArchivo+String.valueOf(folderId));
DLFolderLocalServiceUtil.updateDLFolder(folder);
ServiceContext serviceContext= ServiceContextFactory.getInstance(DLFileEntry.class.getName(), request);
File myfile =  new File(nombreArchivo);
fileItem.write(myfile); 
List<DLFileEntryType> tip = DLFileEntryTypeLocalServiceUtil.getFileEntryTypes(DLUtil.getGroupIds(themeDisplay));
DLFileEntry DLfileEntry = DLFileEntryLocalServiceUtil.addFileEntry(userId, groupId, 0, folderId, null, MimeTypesUtil.getContentType(myfile), nombreArchivo, "Image banner_"+nombreArchivo, "", tip.get(0).getFileEntryTypeId(), null, myfile, fileItem.getInputStream(), myfile.getTotalSpace(), serviceContext);
FileVersion fileVersion = null;
//FileEntry fileEntry = DLAppServiceUtil.getFileEntry(groupId, folderId, nombreArchivo);
//String path = DLUtil.getPreviewURL(fileEntry, fileVersion, themeDisplay, "&imagePreview=1");
String path1 = themeDisplay.getPortalURL()+"/c/document_library/get_file?uuid="+DLfileEntry.getUuid()+"&groupId="+themeDisplay.getScopeGroupId();
String path = "/documents/" + DLfileEntry.getGroupId() + "/" + DLfileEntry.getFolderId() + "/" + DLfileEntry.getTitle()+"/"+DLfileEntry.getUuid();
System.out.println("path " + path);
System.out.println("path " + path1);
prefs.setValue(nombreCampo, path);

这是输出:

path /documents/10180/0/cinesa888.png/f24e6da2-0be8-47ad-a3b5-a4ab0d41d17f
path http://localhost:8080/c/document_library/get_file?uuid=f24e6da2-0be8-47ad-a3b5-a4ab0d41d17f&groupId=10180

我试图像lpratlong说的那样获取URL(DLUtil),但是当我尝试使用DLAppServiceUtil.getFileEntry(..)获取FileEntry时,我出现了一个错误,表明没有FileEntry。

我不知道我做错了什么..有什么想法吗? 感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Liferay API将文件存储在文档库中:查看DLFolder和DLFileEntry API(例如,DLFileEntryLocalServiceUtil将显示允许的本地操作)。 这些API允许您将文件存储在文件系统中(在Liferay安装的“data”文件夹中),并将文件的参考存储在Liferay数据库中。