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";
}



目前有还有一个问题,就是传到媒体库中的文件,被重命名了,解决不了,谁有办法给我留言?谢谢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值