(Portal 开发读书笔记)PortletFileUpload

简介:

 Portlet 也可以上传文件,它用的是apache commons-fileupload的PortletFileUpload类

也在commons-fileupload.jar 包里面

 
 
  1. public class PortletFileUpload extends FileUpload 
  2.   public static final boolean isMultipartContent(ActionRequest request) 
  3.   { 
  4.     return FileUploadBase.isMultipartContent(new PortletRequestContext(request)); 
  5.   } 
  6.  
  7.   public PortletFileUpload() 
  8.   { 
  9.   } 
  10.  
  11.   public PortletFileUpload(FileItemFactory fileItemFactory) 
  12.   { 
  13.     super(fileItemFactory); 
  14.   } 
  15.  
  16.   public List parseRequest(ActionRequest request) 
  17.     throws FileUploadException 
  18.   { 
  19.     return parseRequest(new PortletRequestContext(request)); 
  20.   } 
  21.  
  22.   public FileItemIterator getItemIterator(ActionRequest request) 
  23.     throws FileUploadException, IOException 
  24.   { 
  25.     return super.getItemIterator(new PortletRequestContext(request)); 
  26.   } 

 

要上传文件,官方教程给了一个例子。

上传动作位于java代码中:

 
 
  1. //创建一个PortletFileUpload的对象
  2. PortletFileUpload pfu = new PortletFileUpload(); 
  3. //设置可以被上传的文件的最大字节数
  4. pfu.setFileSizeMax(MAX_UPLOAD_FILE_SIZE); 
  5. //校验来自Portlet的请求是否是一个文件上传请求,当前仅当ActionRequest的请求头内容类型是multipart/form-data时候才返回真
  6. if(PortletFileUpload.isMultipartContent(request)) { 
  7. //如果是一个文件上传请求,那么创建一个迭代器,用于迭代所有被上传的File
  8. FileItemIterator iter = pfu.getItemIterator(request); 
  9. while (iter.hasNext()) { 
  10. //每一个FileItemStream都打开一个文件流用于操作上传的某个File
  11. FileItemStream item = iter.next(); 
  12. InputStream stream = item.openStream(); 
  13. byte[] buffer = new byte[1024]; 
  14. while (true) { 
  15. if (!item.isFormField()) { 
  16. byte[] bytes = new byte[buffer]; 
  17. stream.read(bytes); 

然后在页面上,我们必须创建一个表单,并且设置其类型为multipart/form-data

 
 
  1. <form name="uploadTocForm" method="post" 
  2.  
  3. action="${uploadTocActionUrl}" enctype="multipart/form-data"> 

然后在form内部,因为可以多文件上传,所以每一个上传控件都应该写为:

 
 
  1. <input type="file" name="tocFile"/> 

它等价于代码中的FileItem





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/844369,如需转载请自行联系原作者

目录
相关文章
|
JavaScript 数据可视化 前端开发
《面向三维GIS的Cesium开发与应用》读书笔记
《面向三维GIS的Cesium开发与应用》读书笔记
|
安全 测试技术 数据安全/隐私保护
软件安全开发生命周期读书笔记
分阶段: 0. 教育和意识       1.微软成功的原因在于管理层支持和教育与培训.       2.工程师必须对基本的安全弱点、常见的安全漏洞类型、基本的安全设计有所了解。
1459 0
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
117 1