博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java servlet中上传文件的简单实现(基于第三方jar)
阅读量:4362 次
发布时间:2019-06-07

本文共 6404 字,大约阅读时间需要 21 分钟。

这里的案例使用了两种文件上传的组件、分别介绍

1、使用JSPSmartUpload完成上传

1 package test_servlet_package; 2  3 import java.io.File; 4 import java.io.IOException; 5 import java.util.Calendar; 6 import java.util.Random; 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest;10 import javax.servlet.http.HttpServletResponse;11 import com.jspsmart.upload.SmartUpload;12 13 public class test_servlet_SmartUpload extends HttpServlet {14 15     String tempPath = "D:\\test";16     String filePath = "D:\\filePath";17     @Override18     protected void doPost(HttpServletRequest request, HttpServletResponse response)19             throws ServletException, IOException {20         response.setCharacterEncoding("GBK");21         SmartUpload mySmartUpload = new SmartUpload();22         // 初始化23         mySmartUpload.initialize(getServletConfig(), request, response);24         long file_size_max = 4000000;25         String ext = "";26         try {27             mySmartUpload.setAllowedFilesList("jpg,gif,png");28             mySmartUpload.upload();// 上载文件29         } catch (Exception e) {30             response.getWriter().write("");31         }32         try {33             com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);34             if (!myFile.isMissing()) {35                 ext = myFile.getFileExt(); // 取得后缀名36                 int file_size = myFile.getSize(); // 取得文件的大小37                 String saveurl = "";38                 if (file_size < file_size_max) {39                     // 更改文件名,取得当前上传时间的毫秒数值40                     Calendar calendar = Calendar.getInstance();41                     String filename = String.valueOf(calendar.getTimeInMillis());42                     Random r = new Random();43                     String ram = String.valueOf(r.nextInt(1241241241));44                     filename = filename + ram;45                     filename = filename.substring(0, (filename.length() - ext.length() - 1));46                     //saveurl = this.getServletContext().getRealPath("/") + "/uploadFile/" + filename + "." + ext;47                     //System.out.println(saveurl);48                     File uploadFile2 = new File(filePath);49                     if(!uploadFile2.exists()){50                         uploadFile2.mkdirs();51                     }52                     myFile.saveAs(filePath+"/"+filename+"." + ext);53                 }54             }55             String name = mySmartUpload.getRequest().getParameter("name");56             request.setAttribute("name", "name");57             request.getSession().setAttribute("name", "name");58             request.getSession().getId();59             System.out.println(name);60         } catch (Exception e) {61             e.printStackTrace();62         }63         request.getRequestDispatcher("/uploadsuccess.jsp").forward(request, response);64     }65 }

2、使用commons-fileupload完成文件上传

1 package test_servlet_package; 2  3 import java.io.File; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 import java.util.Iterator; 7 import java.util.List; 8 import javax.servlet.ServletException; 9 import javax.servlet.http.HttpServlet;10 import javax.servlet.http.HttpServletRequest;11 import javax.servlet.http.HttpServletResponse;12 import org.apache.commons.fileupload.FileItem;13 import org.apache.commons.fileupload.disk.DiskFileItemFactory;14 import org.apache.commons.fileupload.servlet.ServletFileUpload;15 16 public class test_servlet extends HttpServlet {17 18     String tempPath = "D:\\test";19     String filePath = "D:\\filePath";20     @Override21     protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {22         res.setContentType("text/plain;charset=gbk");23         PrintWriter pw = res.getWriter();24         try {25             DiskFileItemFactory diskFactory = new DiskFileItemFactory();26             // threshold 极限、临界值,即硬盘缓存 1M27             diskFactory.setSizeThreshold(4 * 1024);28             // repository 贮藏室,即临时文件目录29             diskFactory.setRepository(new File(tempPath));30             ServletFileUpload upload = new ServletFileUpload(diskFactory);31             // 设置允许上传的最大文件大小 4M32             upload.setSizeMax(4 * 1024 * 1024);33             // 解析HTTP请求消息头34             List
fileItems = upload.parseRequest(req);35 Iterator
iter = fileItems.iterator();36 while (iter.hasNext()) {37 FileItem item = (FileItem) iter.next();38 if (item.isFormField()) {39 System.out.println("处理表单内容 ...");40 processFormField(item, pw);41 } else {42 System.out.println("处理上传的文件 ...");43 processUploadFile(item, pw);44 }45 }46 pw.close();47 } catch (Exception e) {48 System.out.println("使用 fileupload 包时发生异常 ...");49 e.printStackTrace();50 }51 }52 53 // 处理表单内容54 private void processFormField(FileItem item, PrintWriter pw) throws Exception {55 String name = item.getFieldName();56 String value = item.getString();57 pw.println(name + " : " + value + "\r\n");58 }59 60 // 处理上传的文件61 private void processUploadFile(FileItem item, PrintWriter pw) throws Exception {62 // 此时的文件名包含了完整的路径,得注意加工一下63 String filename = item.getName();64 System.out.println("完整的文件名:" + filename);65 int index = filename.lastIndexOf("\\");66 filename = filename.substring(index + 1, filename.length());67 long fileSize = item.getSize();68 if ("".equals(filename) && fileSize == 0) {69 System.out.println("文件名为空 ...");70 return;71 }72 File uploadFile = new File(filePath + "/" + filename);73 File uploadFile2 = new File(filePath);74 if(!uploadFile2.exists()){75 uploadFile2.mkdirs();76 }77 item.write(uploadFile);78 pw.println(filename + " 文件保存完毕 ...");79 pw.println("文件大小为 :" + fileSize + "\r\n");80 }81 }

3、依赖的jar:

1 
2
3
4
5
6
7
8
9
10
11

 

转载于:https://www.cnblogs.com/kongxianghao/p/6961785.html

你可能感兴趣的文章
Centos7系统下安装Docker
查看>>
PostgreSQL 序列(SEQUENCE)
查看>>
Missing Number
查看>>
Ionic3 demo TallyBook 实例3
查看>>
laravel服务容器
查看>>
Entity Framework的查询
查看>>
ZH奶酪:Python按行读取文件
查看>>
07-使用循环进行遍历数组(运算符)
查看>>
控件布局通用解决方案
查看>>
scala流程控制语句以及方法和函数
查看>>
MySQL的sql_mode模式
查看>>
windows命令——explorer
查看>>
<转载>Bootstrap 入门教程 http://www.cnblogs.com/ventlam/archive/2012/05/28/2520703.html 系列...
查看>>
jquery和js cookie的使用解析
查看>>
类的内置方法
查看>>
世界是数字的 读后感
查看>>
算法项目步骤流程
查看>>
POJ 2942 Knights of the Round Table ★(点双连通分量+二分图判定)
查看>>
10.scheam.xml的配置
查看>>
通过命令给Linux(CentOS)分区
查看>>