0

我正在做一个 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。

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

4

1 回答 1

0

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

于 2013-11-14T14:33:46.237 回答