Wednesday, January 7, 2015

Receive file upload in Liferay portlet

Upload

Using UploadPortletRequest to receive file input stream:

UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(resourceRequest);

long                  fileSize = uploadRequest.getSize("field_name");
InputStream              is = uploadRequest.getFileAsStream("field_name");
String          mimeType = uploadRequest.getContentType("field_name");
String sourceFileName = uploadRequest.getFileName("field_name");

Save

To create file in Document and Media Library, using this one:

ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
ServiceContext serviceContext = ServiceContextFactory.getInstance(request);
User currentUser = PortalUtil.getUser(request);

// with default repository, repositoryId is equals to scopeGroupId
long repositoryId = themeDisplay.getScopeGroupId(); 
long userId = themeDisplay.getUserId();
long groupId = themeDisplay.getScopeGroupId();
long fileEntryTypeId = ParamUtil.getLong(serviceContext, "fileEntryTypeId", -1L);

Map<String, Fields> fieldsMap = new HashMap<String, Fields>();
// Now, add new one

DLFileEntry newFile = DLFileEntryLocalServiceUtil.addFileEntry(userId, groupId,
                                    repositoryId, folderId, sourceFileName, mimeType, title, "", "", fileEntryTypeId,
                                    fieldsMap, file, is, size, serviceContext);


DLFileEntryLocalServiceUtil.updateFileEntry(userId, newFile.getFileEntryId(),
                                    sourceFileName, mimeType, title, "", "", true, fileEntryTypeId, fieldsMap, null,
                                    null, uploadRequest.getSize(posterName), serviceContext);


In case, you want to create folder to save the file, this is how to do:
            // parentId = 0L means Root folder in Document Library
            long parentId = 0L; 

            // with default repository, repositoryId is equals to scopeGroupId
            long repositoryId = themeDisplay.getScopeGroupId();

            long userId = themeDisplay.getUserId();
            long groupId = themeDisplay.getScopeGroupId();

            DLFolder folder = DLFolderLocalServiceUtil.addFolder(userId, groupId, repositoryId, false, parentId, folderName, "", serviceContext);
            newFolderId = folder.getFolderId(); 


What about creating a list folder in hierarchy?
public long createFolders(String[] folders, ThemeDisplay themeDisplay, ServiceContext serviceContext) {
        int num = folders.length;

        long parentId = 0L;
        long newFolderId = 0L;

        for (int i = 0; i < num; i++) {
            newFolderId = MyUtilClass.findFolderByName(folders[i], parentId, themeDisplay.getScopeGroupId());
            if (newFolderId == -1) {
                newFolderId =
MyUtilClass.createFolder(folders[i], parentId, themeDisplay, serviceContext);
            }
            parentId = newFolderId;
        }

        return newFolderId;
    }
 

Get Link

To get file URL:
 
/* format file url: domain/documents/[groupid]/[folderid]/[fileName]/[uuid]
* e.g: http://localhost:8080/documents/10828/22503/Penguins2_1390451913869.JPG/0da81b4e-37cf-45a4-9872-8ac3447d9bba
* */
                            

String fileUrl = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + SLASH + "documents"
                                    + SLASH + themeDisplay.getScopeGroupId() + SLASH + folderId + SLASH
                                    + HttpUtil.encodeURL(HtmlUtil.unescape(title)) + SLASH + newFile.getUuid();

No comments:

Post a Comment