一、在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";
}
目前有还有一个问题,就是传到媒体库中的文件,被重命名了,解决不了,谁有办法给我留言?谢谢