`

liferay上传文件

阅读更多
一、在portlet一般上传文件

public void uploadFile(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
		UploadPortletRequest upload = com.liferay.portal.util.PortalUtil.getUploadPortletRequest(actionRequest);
		String fileName = upload.getFileName("file");
		String contentType = upload.getContentType("file");
		long size = upload.getSize("file");
		File tempFile = upload.getFile("file");
		InputStream is = upload.getFileAsStream("file");
		if (Validator.isNotNull(fileName)) {
			Date today = new Date();
			SimpleDateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
			String formattedDate = formatter.format(today);
			String dirPath = actionRequest.getPortletSession().getPortletContext().getRealPath("/") + File.separator + "uploadfiles" + File.separator
					+ formattedDate + File.separator;
			File NewfileDir = new File(dirPath);
			if (!NewfileDir.exists()) {
				NewfileDir.mkdir();
			}
			FileUtil.copyFile(tempFile, new File(dirPath + fileName));
			FileUtil.delete(tempFile);
			SessionMessages.add(actionRequest, "success");
		}
	}



<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ page import ="javax.portlet.PortletURL" %>
<portlet:actionURL name="uploadFile" var="uploadFileURL"/>
<liferay-ui:success key="success" message="upload-file-successfully"></liferay-ui:success>
<aui:form name="fm" action="<%=uploadFileURL.toString() %>" method="post" enctype="multipart/form-data">
<aui:fieldset>
<aui:input name="file" size="45" type="file"/>
<aui:button-row>
<aui:button type="submit"/>
</aui:button-row>
</aui:fieldset>
</aui:form>




二、将获取到的文件上传到Liferay的文档库

public void uploadFile(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
		UploadPortletRequest upload = com.liferay.portal.util.PortalUtil.getUploadPortletRequest(actionRequest);
		String fileName = upload.getFileName("file");
		String contentType = upload.getContentType("file");
		long size = upload.getSize("file");
		File tempFile = upload.getFile("file");
		InputStream is = upload.getFileAsStream("file");

       if (Validator.isNotNull(fileName)) {

			addLiferayStore(actionRequest, tempFile);

			SessionMessages.add(actionRequest, "success");
		}
	}


public void addLiferayStore(ActionRequest actionRequest, File f) throws PortalException, SystemException, IOException {
		String mimeType = MimeTypesUtil.getContentType(f);
		long userId = PortalUtil.getUserId(actionRequest);
		Long groupId = PortalUtil.getScopeGroupId(actionRequest);
		DLAppLocalServiceUtil.addFileEntry(userId, groupId, DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT, f.getName(), mimeType,
				f.getName(), f.getName(), "", FileUtil.getBytes(f), ServiceContextFactory.getInstance(DLFileEntry.class.getName(), actionRequest));
	}


在portlet中获取到我们上传的文件,只算是完成了第一步。取到了上传的文件,怎么传到Liferay的文件库中呢?使用如下的接口

DLAppLocalServiceUtil.addFileEntry(long userId, long repositoryId, long folderId,java.lang.String sourceFileName, java.lang.String mimeType,java.lang.String title, java.lang.String description,java.lang.String changeLog, byte[] bytes,com.liferay.portal.service.ServiceContext serviceContext)

此接口的参数逐个说明:

long userId:上传此文件的用户id

long repositoryId:仓库存储ID,此ID一般为groupid

long folderId:文件夹ID,可以自己创建,或使用liferay默认的如:DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT等,最好是自己根据上传资源的情况分类,如新闻的存到新闻文件,博客的存成博客文件等

String sourceFileName:上传文件的源文件名

String mimeType:算是文件类型,可以使用mimeType = MimeTypesUtil.getContentType(fileName);根据文件名获取。

String title:文件标题,这个与SourceFileName的区别在于,此title是最终显示在系统上的,可以由用户输入,源文件名称是上传获取的文件名称,不能手动改变。可以留空。

String description:关于此文件的描述,可以留空。

String changeLog:文件修改日志,可以留空。

byte[] bytes:文件的正文件,字节数组。

ServiceContext serviceContext:此类可以通过以下代码

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

获取。此对象里面包含了一些环境信息,如groupid,companyid,权限,门户路径,当前语言,userId等信息。

在实际应用中可以自己将上面的这个接口再做一层封装,作为一个公共的文件上传接口,以供其他需要文件上传的地方调用,具体的请自行封装,这里就不再帖我封装的代码。


2、获取文件路径
上面的文件上传之后返回的是一个FileEntry的对象,如果获取到上传的文件的路径呢,方法如下,可以定义一个方法,用来返回文件路径,此方法对图片、各式文件都是有效。

public static String getFilePath(FileEntry fileEntry) {
 if (null!=fileEntry) {
 return "/documents/" + fileEntry.getRepositoryId() + "/" + fileEntry.getFolderId() + "/"
 + HttpUtil.encodeURL(HtmlUtil.unescape(fileEntry.getTitle()), true) + "/" + fileEntry.getUuid();
 }else {
 //如有需要,此处可以定义一个默认图片
 return StringPool.BLANK;
 }
或者下面的这个方法,下面的这个更简便一些

public static String getFilePath(FileEntry fileEntry) {
 if (null!=fileEntry) {
 return "/documents/" + fileEntry.getRepositoryId() + "/" + fileEntry.getUuid();
 }else {
 //如有需要,此处可以定义一个默认图片
 return StringPool.BLANK;
 }
有时候如果文件是一个图片,上传的图片可以很大,如何获取一个缩略图呢?如下:

public static String getSmallImagePath(FileEntry fileEntry){
String path = getFilePath(fileEntry);
return path+"?imageThumbnail=1";
}




目前有还有一个问题,就是传到媒体库中的文件,被重命名了,解决不了,谁有办法给我留言?谢谢
分享到:
评论
1 楼 yinxiuzhen1 2014-04-13  
好文章!学习了。

相关推荐

Global site tag (gtag.js) - Google Analytics