Servlet3.0上传文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet3.0上传文件相关的知识,希望对你有一定的参考价值。
1 package com.itheima.upload; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.annotation.MultipartConfig; 11 import javax.servlet.annotation.WebServlet; 12 import javax.servlet.http.HttpServlet; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 import javax.servlet.http.Part; 16 17 import com.itheima.utils.UUIDUtils; 18 import com.itheima.utils.UploadUtils; 19 /** 20 * 文件上传的Servlet 21 * 表单项:分为两类 一类是文件表单项 一类是非文件表单项(普通表单项,不必设置enctype="mutipart/form-data") 22 */ 23 @MultipartConfig 24 @WebServlet("/UploadServlet") 25 public class UploadServlet extends HttpServlet { 26 private static final long serialVersionUID = 1L; 27 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 //接受普通数据 非文件表单项 即普通表单项 不必设置enctype="multipart/form-data" 29 request.setCharacterEncoding("UTF-8"); 30 String filedesc = request.getParameter("filedesc"); 31 System.out.println("文件描述:"+filedesc); 32 //接受文件 文件表单项 必须满足三要素 post form enctype="multipart/form-data" 33 //通过表单file控件(<input type="file" name="upload">)的名字属性直接获取Part对象 34 Part part = request.getPart("upload"); 35 //获得文件大小 36 long size = part.getSize(); 37 System.out.println("文件的大小为:"+size); 38 String name = part.getName(); 39 System.out.println("文件上传表单的name属性的值为:"+name); 40 //获取头信息 41 String header = part.getHeader("Content-Disposition"); 42 System.out.println(header); 43 //获取文件名字 \"为转义 44 int lastIndexOf = header.lastIndexOf("filename=\""); 45 String filename = header.substring(lastIndexOf+10, header.length()-1); 46 System.out.println("文件名称:"+filename); 47 //获得文件内容 48 InputStream ips = part.getInputStream(); 49 //获取要上传到的文件夹路径 50 String realPath = this.getServletContext().getRealPath("/upload"); 51 System.out.println(realPath); 52 //获得唯一文件名 53 String uniname = UUIDUtils.getUUIDFileName(filename); 54 //获得新的上传路径 55 String fenglipath = realPath + UploadUtils.getPath(uniname); 56 System.out.println(fenglipath); 57 //创建上传路径的file对象 58 File file = new File(fenglipath); 59 //如果上传路径不存在,就创建 60 if(!file.exists()){ 61 file.mkdirs(); 62 } 63 //创建字节输出流,参数为"路径+文件名" 64 OutputStream ops = new FileOutputStream(fenglipath+"/"+uniname); 65 //io流读写 66 byte [] bytes = new byte [1024]; 67 int len; 68 while((len=ips.read(bytes))!=-1){ 69 ops.write(bytes, 0, len); 70 } 71 //关流 72 ips.close(); 73 ops.close(); 74 75 76 } 77 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 78 doGet(request, response); 79 } 80 81 }
以上是关于Servlet3.0上传文件的主要内容,如果未能解决你的问题,请参考以下文章