温故知新:struts2_05其他功能:文件上传

不得不说,struts2的文件上传功能做的实在是太方便了,如果脱离struts2的文件上传功能,单纯使用servlet结合fileUpload工具包,1k1k的读,1k1k的写,那么struts2的文件上传功能,简直是把代码量缩减的不止一点半点。
首先,文件上传的表单必须是以下设置
1 <form action="XXX" method="post" enctype="multipart/form-data">
设置完毕之后,看一下servlet的post的方法的设置
 1 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2         
 3         request.setCharacterEncoding("utf-8");
 4         
 5         // 首先需要确认,到底是不是文件上传的请求,
 6         boolean isMultipart = ServletFileUpload.isMultipartContent(request);
 7         
 8         if (isMultipart) {
 9             // 创建一个文件处理对象
10             ServletFileUpload upload = new ServletFileUpload();
11             InputStream is = null;
12             FileOutputStream os = null;
13             try {
14                 // 解析请求中的所有元素
15                 FileItemIterator iter = upload.getItemIterator(request);
16                 while (iter.hasNext()) {
17                     FileItemStream item = iter.next();
18                     is = item.openStream();
19                     //是否是表单域
20                     if (item.isFormField()) {
21                         //其他操作,保存参数等
22                     } else {
23                         //不是表单域则保存文件
24                         String path = request.getSession().getServletContext().getRealPath("/");
25                         path = path + "/upload/" + item.getName();
26                         os = new FileOutputStream(path);
27                         //流读写
28                         byte[] buf = new byte[1024];
29                         while(is.read(buf)>0){
30                             os.write(buf);
31                         }
32                     }
33 
34                 }
35             } catch (FileUploadException e) {
36                 e.printStackTrace();
37             } finally{
38                 if (is != null) {
39                     is.close();
40                 }
41                 if (os != null) {
42                     os.close();
43                 }
44             }
45         }
46     }
洋洋洒洒一大堆,struts2封装了这些通用的处理,我们可以按照struts2的风格来获取要上传文件的对象,直接写一个多文件上传的例子吧
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>文件上传</title>
 8 </head>
 9 <body>
10     <form action="FileUpload" method="post" enctype="multipart/form-data">
11         文件上传测试:<br>
12         <input type="file" name="text"/><br>
13         <input type="file" name="text"/><br>
14         <input type="file" name="text"/><br>
15         <input type="submit" value="提交">
16     </form>
17 </body>
18 </html>
action为
 1 package demo.fileUpload;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 
 6 import org.apache.commons.io.FileUtils;
 7 import org.apache.struts2.ServletActionContext;
 8 
 9 public class FileUpload {
10     
11     //文件接收数组如果是单文件上传,那就不需要定义数组了,定义单个文件对象就行
12     private File text[];
13     //对应的文件名,这里的文件名是“名字.后缀”的形式,这个属性的命名需要是“文件属性的名字”+FileName。
14     private String[] textFileName;
15     //对应的文件类型,是文件的真实类型,比如“text/plain”这个属性的命名需要是“文件属性的名字”+ContentType
16     private String[] textContentType;
17 
18     public String execute() throws IOException{
19         
20         String dir = "";
21         File file = null;
22         
23         for (int i = 0; i < text.length; i++) {
24             //创建要新建的文件位置
25             dir = ServletActionContext.getServletContext().getRealPath("/"+  "/upload/" + textFileName[i];
26             file = new File(dir);
27             //保存文件
28             if (!file.exists()) {
29                 //使用common.io工具包保存文件
30                 FileUtils.copyFile(text[i], file);
31             }
32         }
33         
34         return "success";
35     }
36
37}

posted on 2014-11-01 22:10 都较瘦 阅读(130) 评论(0)  编辑  收藏 所属分类: MVCFramework


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告

博客定位:囿于目前的水平,博客定位在记录自己的学习心得和随手的练习

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜