JSP页面上传文件

通常来说,我们需要获得用户填写的数据时,会使用表单<form>这个标签。但是如果要上传的数据中包含了文件,对应的form设置就会不一样了。

<form action="/MVC_Test_Cook/FoodAddServlet" method="post"
        enctype="multipart/form-data">
    </form>
 如果我们使用request的一些方法就会很麻烦,所以apache给我们提供了一个很方便的方法
开始时,需要两个jar包commons-fileupload-1.2.1.jar和commons-io-1.4.jar,将这两个包导入后,可通过下列代码,完成一系列操作
 
 1 // 1.创建一个磁盘文件项工厂对象
 2             DiskFileItemFactory diskfileitemfactory = new DiskFileItemFactory();
 3             // 2.创建一个核心解析类(解析从浏览器发送的请求)
 4             ServletFileUpload servletfileupload = new ServletFileUpload(diskfileitemfactory);
 5             // 3.解析request请求,返回的是Lis    t集合,在List集合
 6             List<FileItem> list = servletfileupload.parseRequest(request);
 7             // 4.遍历集合,判断是否是普通表单,还是文件上传项目
 8             for (FileItem fileItem : list) {
 9                 if (fileItem.isFormField()) {
10                     // 判断为普通表单,并接收值
11                         String name = fileItem.getFieldName();// 获取表单项的name属性的值
12                         String value = fileItem.getString("UTF-8");// 传入编码,并获取表单的值
               。。。进行普通表单值的相应操作
}
 1 else {
 2                     // 判断为文件项
 3                     // 文件上传功能:
 4                     // 获得文件上传的名称
 5 
 6                     String fileName = fileItem.getName();
 7                     //判断用户是否选择了文件
 8                     if (!fileName.isEmpty() && !fileName.equals("")) {
 9                         // 通过工具类使文件名唯一
10                         String uuidfileName = UploadUtils.getUUIDFileName(fileName);
11                         // 获取文件存储的路径
12                         String path = this.getServletContext().getRealPath("/upload");
13                         // 整合路径和文件名
14                         url = path + "//" + uuidfileName;
15                         // 获取文件的输入流
16                         InputStream inputStream = fileItem.getInputStream();
17                         // 获取文件的输出流
18                         OutputStream outputStream = new FileOutputStream(url);
19 
20                         // 将输入流中的数据写入到输出流
21                         int len = 0;
22                         byte[] ch = new byte[1024];
23                         while ((len = inputStream.read(ch)) != -1) {
24                             outputStream.write(ch, 0, len);
25                         }
26                         inputStream.close();
27                         outputStream.close();
28                     }
29                 }
通过该方法可完成form表单中的文件上传功能

 



 


posted @ 2018-03-16 10:37  刘飞飞飞  阅读(264)  评论(0编辑  收藏  举报