Portlet 也可以上传文件,它用的是apache commons-fileupload的PortletFileUpload类
也在commons-fileupload.jar 包里面
- public class PortletFileUpload extends FileUpload
- {
- public static final boolean isMultipartContent(ActionRequest request)
- {
- return FileUploadBase.isMultipartContent(new PortletRequestContext(request));
- }
- public PortletFileUpload()
- {
- }
- public PortletFileUpload(FileItemFactory fileItemFactory)
- {
- super(fileItemFactory);
- }
- public List parseRequest(ActionRequest request)
- throws FileUploadException
- {
- return parseRequest(new PortletRequestContext(request));
- }
- public FileItemIterator getItemIterator(ActionRequest request)
- throws FileUploadException, IOException
- {
- return super.getItemIterator(new PortletRequestContext(request));
- }
- }
要上传文件,官方教程给了一个例子。
上传动作位于java代码中:
- //创建一个PortletFileUpload的对象
- PortletFileUpload pfu = new PortletFileUpload();
- //设置可以被上传的文件的最大字节数
- pfu.setFileSizeMax(MAX_UPLOAD_FILE_SIZE);
- //校验来自Portlet的请求是否是一个文件上传请求,当前仅当ActionRequest的请求头内容类型是multipart/form-data时候才返回真
- if(PortletFileUpload.isMultipartContent(request)) {
- //如果是一个文件上传请求,那么创建一个迭代器,用于迭代所有被上传的File
- FileItemIterator iter = pfu.getItemIterator(request);
- while (iter.hasNext()) {
- //每一个FileItemStream都打开一个文件流用于操作上传的某个File
- FileItemStream item = iter.next();
- InputStream stream = item.openStream();
- byte[] buffer = new byte[1024];
- while (true) {
- if (!item.isFormField()) {
- byte[] bytes = new byte[buffer];
- stream.read(bytes);
- }
- }
- }
- }
然后在页面上,我们必须创建一个表单,并且设置其类型为multipart/form-data
- <form name="uploadTocForm" method="post"
- action="${uploadTocActionUrl}" enctype="multipart/form-data">
然后在form内部,因为可以多文件上传,所以每一个上传控件都应该写为:
- <input type="file" name="tocFile"/>
它等价于代码中的FileItem
本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/844369,如需转载请自行联系原作者