zoukankan      html  css  js  c++  java
  • Servlet学习:(三)Servlet3.0 上传文件

    转:

    Servlet学习:(三)Servlet3.0 上传文件

    一、注意事项

    客户端(浏览器)

    • 表单的提交方法必须是post
    • 必须有一个文件上传组件 <input type="file" name="file"/>
    • 必须设置表单的enctype="multipart/form-data

    服务器

    • 在Servelt上添加注解  @MultipartConfig

    二、参考

    HttpServletRequest 对文件上传的支持

    此前,对于处理上传文件的操作一直是让开发者头疼的问题,因为 Servlet 本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。如今这都成为了历史,Servlet 3.0 已经提供了这个功能,而且使用也非常简单。为此,HttpServletRequest 提供了两个方法用于从请求中解析出上传的文件:

    • Part getPart(String name)
    • Collection<Part> getParts()

    前者用于获取请求中给定 name 的文件,后者用于获取所有的文件。每一个文件用一个 javax.servlet.http.Part 对象来表示。该接口提供了处理文件的简易方法,比如 write()、delete() 等。至此,结合 HttpServletRequest 和 Part 来保存上传的文件变得非常简单,如下所示:

    1

    2

    3

    Part photo = request.getPart("photo");

    photo.write("/tmp/photo.jpg");

    // 可以将两行代码简化为 request.getPart("photo").write("/tmp/photo.jpg") 一行。

    另外,开发者可以配合前面提到的 @MultipartConfig 注解来对上传操作进行一些自定义的配置,比如限制上传文件的大小,以及保存文件的路径等。其用法非常简单,故不在此赘述了。

    需要注意的是,如果请求的 MIME 类型不是 multipart/form-data,则不能使用上面的两个方法,否则将抛异常。

    URL:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

    三、Html

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <title>Upload File</title>
    5. </head>
    6. <body>
    7. <h1>Upload File</h1>
    8. <form action="/uploadServlet" method="post" enctype="multipart/form-data">
    9. File : <input type="file" name="file"/>
    10. <input type="submit" name="Submit"/>
    11. </form>
    12. </body>
    13. </html>

    四、Servlet

    1. package com.idark.servlet;
    2.  
    3. import javax.servlet.ServletException;
    4. import javax.servlet.annotation.MultipartConfig;
    5. import javax.servlet.annotation.WebServlet;
    6. import javax.servlet.http.HttpServlet;
    7. import javax.servlet.http.HttpServletRequest;
    8. import javax.servlet.http.HttpServletResponse;
    9. import javax.servlet.http.Part;
    10. import java.io.File;
    11. import java.io.IOException;
    12. import java.io.PrintWriter;
    13.  
    14. /**
    15. * 上传文件
    16. */
    17. @WebServlet(name = "UploadServlet" , urlPatterns = "/uploadServlet")
    18. @MultipartConfig
    19. public class UploadServlet extends HttpServlet {
    20. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    21.  
    22. //创建目录
    23. File path = new File("d:\tmp");
    24. if (!path.exists()){
    25. path.mkdir();
    26. }
    27. //获取文件
    28. Part img = request.getPart("file");
    29. //文件全路径
    30. String filePath = path.getPath() + File.separator + img.getSubmittedFileName();
    31. //写入文件
    32. img.write(filePath);
    33. //输出信息
    34. System.out.println("File Upload : " + filePath);
    35. PrintWriter out = response.getWriter();
    36. out.println("File Upload : " + filePath);
    37.  
    38. }
    39.  
    40. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    41. System.out.println("not support upload file by get");
    42. }
    43. }

    五、验证结果

  • 相关阅读:
    SQL Server数据库中批量替换数据的方法
    js 鼠标移上去弹出层效果
    50个jQuery代码段帮你成为更好的JavaScript开发者
    MSN、腾讯QQ、SKYPE、阿里旺旺网页在线客服源代码
    正则表达式基础知识
    常用邮箱POP3和SMTP服务器汇总
    CS5序列号
    如何使用Oracle SQLDeveloper 中连接MS SQLServer和MySQL数据库
    Silverlight与后台数据库的三种技术实现基本的互操作(转)
    ADO 与ADO.NET
  • 原文地址:https://www.cnblogs.com/libin6505/p/10565406.html
Copyright © 2011-2022 走看看