在WebContent下新建index.jsp

  要点:

    1.  表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。

    2.  表单 enctype 属性应该设置为 multipart/form-data,只有使用enctype="multipart/form-data",表单才会把文件的内容编码到HTML请求中

    3.  上传单个文件,应该使用单个带有属性 type="file" 的 <input .../> 标签。为了允许多个文件上传,请包含多个 name 属性值不同的 input 标签。输入标签具有不同的名称属性的值。浏览器会为每个 input 标签关联一个浏览按钮。

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="utf-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="upload" method="post" enctype="multipart/form-data">
  11.  
  12. 请选择上传的图片或文件:
  13. <input type="file" name="fileName"/>
  14.  
  15. <input type="submit" value="上传"/>
  16. </form>
  17. </body>
  18. </html>

编写Servlet 处理表单请求:

  需要两个jar包,

manven引入:

  1. <dependency>
  2. <groupId>commons-fileupload</groupId>
  3. <artifactId>commons-fileupload</artifactId>
  4. <version>1.3.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>commons-io</groupId>
  8. <artifactId>commons-io</artifactId>
  9. <version>2.5</version>
    </dependency>
  1. package servlet;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.UnsupportedEncodingException;
  6. import java.util.List;
  7.  
  8. import javax.servlet.ServletContext;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.annotation.WebServlet;
  11. import javax.servlet.http.HttpServlet;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14.  
  15. import org.apache.commons.fileupload.FileItem;
  16. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  17. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  18.  
  19. @WebServlet(value="/upload")
  20. public class Upload extends HttpServlet{
  21.  
  22. @Override
  23. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  24.  
  25. porcess(req, resp);
  26. }
  27.  
  28. @Override
  29. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  30.  
  31. porcess(req, resp);
  32. }
  33.  
  34. public void porcess(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
  35. req.setCharacterEncoding("utf-8");
  36. resp.setContentType("text/html;charset=utf-8");
  37. //创建一个解析器工厂
  38. DiskFileItemFactory factory = new DiskFileItemFactory();
  39. // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中 4M
  40. factory.setSizeThreshold(1024*1024*4);
  41. //创建解析类的实例,文件上传解析器
  42. ServletFileUpload sfu = new ServletFileUpload(factory);
  43. //开始解析
  44. //设置上传文件的最大值(单个文件) 60M
  45. sfu.setFileSizeMax(1024*1024*60);
  46. // 设置最大请求值 (包含文件和表单数据)
  47. sfu.setSizeMax(1024*1024*70);
  48. //每个表单域中数据会封装到一个对应的FileItem对象上
  49. try {
  50.  
  51. // sfu.parseRequest(req): 解析request对象,并把表单中的每一个输入项包装成一个fileItem 对象,并返回一个保存了所有FileItem的list集合。
  52. List<FileItem> items = sfu.parseRequest(req);
  53.  
  54. //区分表单域
  55. for (FileItem item:items) {
  56. //判断输入的类型是 普通输入项 还是文件,isFormField为true,表示这不是文件上传表单域
  57. if(!item.isFormField()){
  58. ServletContext sctx = getServletContext();
  59. //获得存放文件的物理路径
  60. //upload下的某个文件夹 得到当前在线的用户 找到对应的文件夹
  61.  
  62. String path = sctx.getRealPath("/upload");
  63. System.out.println(path);
  64. //获得文件名
  65. String fileName = item.getName();
  66. System.out.println(fileName);
  67.  
  68. //该方法在某些平台(操作系统),会返回路径+文件名
  69. fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
  70. File file = new File(path+"\\"+fileName);
  71.  
  72. if(!file.exists()){
  73. item.write(file);
  74. req.setAttribute("message","文件上传成功!");
  75.  
  76. }
  77. } else {
  78. //普通输入项 ,得到input中的name属性的值
  79. String name=item.getFieldName();
  80. //得到输入项中的值
  81. String value=item.getString("UTF-8");
  82. System.out.println("name="+name+" value="+value);
  83. }
  84. }
  85. } catch (Exception e) {
  86. req.setAttribute("message","错误信息: " + e.getMessage());
  87. }
  88.  
  89. req.getRequestDispatcher("/WEB-INF/status.jsp").forward(req, resp);
  90.  
  91. }
  92. }

最新版本的 commons-fileupload.x.x.jar 文件。可以从 http://commons.apache.org/proper/commons-fileupload/ 下载。

最新版本的 commons-io-x.x.jar 文件。可以从 http://commons.apache.org/proper/commons-io/ 下载。

来源:

http://www.runoob.com/jsp/jsp-file-uploading.html    JSP 文件上传

https://blog.csdn.net/qiyuexuelang/article/details/8861300   Servlet+Jsp实现图片或文件的上传功能

JSP && Servlet | 上传文件的更多相关文章

  1. Servlet上传文件

    Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...

  2. 原生Servlet 上传文件

    依赖jar <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons ...

  3. jsp+servlet上传excel并将数据导入到数据库表的实现方法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. 使用Servlet上传文件

    使用浏览器向服务器上传文件其本质是打开了一个长连接并通过TCP方式传输数据.而需要的动作是客户端在表单中使用file域,并指定该file域的name值,然后在form中设定enctype的值为mult ...

  5. springMVC+jsp+ajax上传文件

    工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...

  6. 【转】JSP使用上传文件,并生产高清缩略图示例

    原文地址:http://blog.csdn.net/yakson/article/details/9875731 前言 刚开始本来只想来测试一下Thumbnails生成缩略图的效果的,顺便来学一下js ...

  7. java servlet上传文件并把文件内容显示在网页中

    servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...

  8. 5.servlet 上传文件

    一.maven依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>com ...

  9. servlet上传文件报错(三)

    1.具体报错如下 null null Exception in thread "http-apr-8686-exec-5" java.lang.OutOfMemoryError: ...

随机推荐

  1. 《打造Facebook》

    王淮的<打造Facebook>一书不厚,花半天时间轻松读完.书中没有大段的说教,只有近乎流水的陈述.正如作者所说,打造Facebook这本书由巴克伯格来写再合适不过.可惜他至少在近几年内没 ...

  2. JavaProject和IProject

    由 IProject 项目得到 Java 项目的方式: IJavaProject javaPoject = JavaCore.create(IProject); 由 IJavaProject 得到 I ...

  3. (linux)BSP板级支持包开发理解

    1. 概述 嵌入式系统由硬件环境.嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求.硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在 ...

  4. 转载——Android permission 访问权限大全

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: Android.permission.ACCESS_CHECKIN_PROPERTIES ...

  5. P2383 狗哥玩木棒

    题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入输出格式 输入格式: 输入文件中的第一行是一个整数n表示测试 ...

  6. mysql函数之七:replace() MySQL批量替换指定字段字符串

    mysql replace实例说明: UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 st ...

  7. Object.prototype.toString.call(obj)检测数据类型

    typeof bar=='object' 不能确切判断数据是一个‘纯粹’的对象 Array null的结果都是object 比较好的方法是: Object.prototype.toString.cal ...

  8. PHPstorm相同变量标识

    setting-> plugins-> Browse Repositories 输入BrowseWordAtCaret 搜索,安装,然后重启

  9. python zlib字符串压缩

    在做网络程序时,可以对字符串进行压缩来节省带宽 项目中用到 {"compress": <压缩标记>, "result":[[设备类型.设备ID, 设 ...

  10. 确认框的使用。弹出一个确认框,Ajax提交一个请求,刷新页面。

    视图: <td> @if (item.ReviewProject.DeclareState == DeclareOrReviewState.正在进行 && !item.Is ...