Servlet3.0文件上传

Servelt3.0文件上传作为一种便捷的文件上传方式很是值得我们去应用的

1.Servlet3.0文件上传使用步骤

  • 浏览器端的要求
    • 表单的提交方法必须是post
    • 必须有一个文件上传组件 <input type="file" name="f"/>
    • 必须设置表单的enctype="multipart/form-data
    • 1 <form action="/upload/upload3" enctype="multipart/form-data"
      2         method="post">
      3         用户名:<input type="text" name="username"><br> 
      4         文件:<input
      5             type="file" name="f"> 
      6         <input type="submit"><br>
      7     </form>
  • 服务器端的要求
    • 在Servelt上添加注解  @MultipartConfig
    • 1 /**
      2  * Servlet3.0文件上传下载
      3  */
      4 @WebServlet("/upload3")
      5 @MultipartConfig
      6 public class upload3 extends HttpServlet {
      7     private static final long serialVersionUID = 1L;
      8        
      9     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

2.Servlet3.0文件上传如何获取数据

  • 获取普通上传组件   request.getParameter(name属性的值);
  • 获取文件上传组件   Part p =  request.getPart("表单文件组件的name名");
    • 获取表单文件的name名
      //获取表单提交页面name的属性值
                  String name = part.getName();
    • 获取真实文件名
      //获取文件真实文件名
      			String header = part.getHeader("content-disposition");
      			String realName=header.substring(header.indexOf("filename=")+10,header.length()-1);
      
    • 获取文件大小
      //获取文件的大小
                  long size = part.getSize();
    • 获取文件的输入流
      			//获取文件的输入流
      			InputStream inputStream = part.getInputStream();
      

3.Servlet3.0文件上传可能会遇到的问题

  • 名字重复的问题 如果用户提交了两个1.png只会保存第一次 这样在实际开发中是很不可取的 解决方法有一下
    • 采用随机名称DSJDLSJDIHU739832hsdhf.png
  • 文件安全问题  如果文件都放在WebContext目录下 那么在互联网上任何人都可以访问的到 那么针对重要的文件可以这样做
    • 放在meta-inf目录下
    • 放在web-inf目录下
    • 放在项目外部 计算机文件夹中
杂家不如专家,精益求精
原文地址:https://www.cnblogs.com/jimisun/p/7820943.html