博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servlet文件上传
阅读量:5221 次
发布时间:2019-06-14

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

package com.peng.web;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.codec.digest.DigestUtils;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class uploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;@SuppressWarnings("unchecked")public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//上传路径File file =new File("E:/upload");//上传临时路径File tFile = new File("E:/tempupload");//判断文件夹是否存在,如果不存在就创建if (!file.exists()) {file.mkdir();}//判断临时文件夹是否存在,如果不存在就创建if (!tFile.exists()) {tFile.mkdir();}//判断form中enctype="multipart/form-data"有没有写if (ServletFileUpload.isMultipartContent(request)) {DiskFileItemFactory factory = new DiskFileItemFactory();//设置缓冲区大小factory.setSizeThreshold(10*1024);//设置临时文件夹factory.setRepository(tFile);ServletFileUpload upload = new ServletFileUpload(factory);//设置文件上传的大小upload.setSizeMax(10*1024*1024);try {//获取表单元素传过来的值List
fileItems = upload.parseRequest(request);for(FileItem item : fileItems){if (item.isFormField()) {//普通的表单元素item.getFieldName();//获取表单的nameitem.getString();//获取表单的值}else{//文件元素,进行io操作item.getName();//上传文件的文件名item.getFieldName();//获取文件的name属性item.getContentType();//获取文件的类型item.getSize();//获取文件的大小InputStream inputStream = item.getInputStream();//根据MD5的值判断文件系统中是否存在被上传的文件String path = haveFile(inputStream);if(path != null) {System.out.println("文件已经存在:" + path);} else {BufferedInputStream bis = new BufferedInputStream(item.getInputStream());String newFileName = getFileNewName(item.getName());BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(file,newFileName)));byte[] buffer = new byte[1024];int len = -1;while((len = bis.read(buffer)) != -1) {bos.write(buffer, 0, len);}bos.flush();bos.close();bis.close();}}}} catch (FileUploadException e) {e.printStackTrace();}}}//防止名字重复private String getFileNewName(String name) {String extName = name.substring(name.lastIndexOf("."));UUID uuid = UUID.randomUUID();String newName = uuid.toString() + extName;return newName;}//查看是否有相同的文件public String haveFile(InputStream inputStream) {String path = null;try {String md5 = DigestUtils.md5Hex(inputStream);File file = new File("E:/upload");File[] files = file.listFiles();for(File subFile : files) {InputStream ins = new FileInputStream(subFile);String subFileMd5 = DigestUtils.md5Hex(ins);if(md5.equals(subFileMd5)) {path = subFile.getPath();}}} catch (IOException e) {e.printStackTrace();}return path;}}

 

转载于:https://www.cnblogs.com/fudapeng/p/3755207.html

你可能感兴趣的文章
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>