Java开发之文件上传
发布时间:2020-12-15 00:15:01 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 package com.example.web; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; impor
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 package com.example.web; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; 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.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; public class FileUpload extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); //指定文件存放目录 String storePath=getServletContext().getRealPath("WEB-INF/files"); File file=new File(storePath); //如果目录不存在,需要创建 if(!file.exists()){ file.mkdirs(); } //要检查是不是enctype=multipart/form-data提交过来的数据 boolean isMultipart=ServletFileUpload.isMultipartContent(request); //如果不是,需要处理 if(!isMultipart){ out.write("请将enctype设置成multipart/form-data类型"); response.setHeader("Refresh","1;URL="+request.getContextPath()); return; } //去生成一个文件上传的FileUpload对象 DiskFileItemFactory factory=new DiskFileItemFactory(); //设置一个临时目录 //factory.setRepository(new File("E:/temp"));temp文件需要临时创建,我已经删掉了 ServletFileUpload upload=new ServletFileUpload(factory); //将用户的请求转化为List<FileItem> try { List<FileItem> items=upload.parseRequest(request); //遍历List<FileItem>中的数据 for (FileItem item : items) { //如果部分文件没有上传 if("".equals(item.getName())){ continue; } //判断是普通字段 if(item.isFormField()){ String fieldName=item.getFieldName(); String fieldValue=item.getString("UTF-8"); System.out.println(fieldName+":"+fieldValue); }else{ //是上传的文件 //需要获取文件名,有可能是路径 String fileName=item.getName(); fileName=fileName.substring(fileName.lastIndexOf(File.separator)+1); //文件名同名问题 fileName=UUID.randomUUID().toString()+"_"+fileName; //解决一个文件夹下的文件过多的问题 //用时间来生成子目录 //String childPath=generateDir(storePath); //用hashcode来生成子目录 String childPath=generateDir(storePath,fileName); //获取上传文件的数据 InputStream is=item.getInputStream(); OutputStream os=new FileOutputStream(storePath+File.separator+childPath+File.separator+fileName); IOUtils.copy(is,os); os.close(); is.close(); //item.delete();//清空临时文件 } } out.write("文件上传成功<a href='"+request.getContextPath()+"'>继续上传</a>"); } catch (FileUploadException e) { e.printStackTrace(); } } private String generateDir(String storePath,String fileName) { int hashcode=fileName.hashCode(); int dir1=hashcode & 0xf; int dir2=(hashcode & 0xf0)>>4; String childPath=dir1+File.separator+dir2; File file=new File(storePath,childPath); if(!file.exists()){ file.mkdirs(); } return childPath; } private String generateDir(String storePath) { DateFormat df=new SimpleDateFormat("yyyyMMddhhmmss"); String childPath=df.format(new Date()); File file=new File(storePath,childPath); if(!file.exists()){ file.mkdirs(); } return childPath; } public void doPost(HttpServletRequest request,IOException { this.doGet(request,response); } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java 读写Parquet格式的数据的示例代码
- java 使用流下载文件代码
- Slow Server? This is the Flow Chart You're Looking
- 休眠 – JPA脏检查
- javax.net.ssl.SSLHandshakeException:sun.security.valid
- Java:使用DecimalFormat格式化双精度和整数,但保留不带小数
- Spring实战之设置普通属性值的方法示例
- java – 使用application.properties在Spring Boot中外化lo
- java – Spring-boot:不能使用持久性
- java – 为什么选择JMS进行异步解决?为什么比一个简单的实