关键代码如下:

index.jsp

  1. <body>
  2. <center>
  3. <h3>文件上传</h3>
  4. <font color="red"><%=request.getAttribute("msg")==null?"":request.getAttribute("msg") %> </font>
  5. <form enctype="multipart/form-data" method="post" action="servlet/FileUploadServlet">
  6. 文件描述:<input type="text" name="text" /><br/>
  7. 选择文件:<input type="file" name="file1" /><br/>
  8. 选择文件:<input type="file" name="file2" /><br/>
  9. 选择文件:<input type="file" name="file3" /><br/>
  10. 选择文件:<input type="file" name="file4" /><br/>
  11. 选择文件:<input type="file" name="file5" /><br/>
  12. <input type="submit" value="上传" />
  13. </form>
  14. </center>
  15. </body>

FileUploadServlet.jsp

    1. package com.accp.fileupload.servlet;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import java.util.List;
    5. import javax.servlet.ServletException;
    6. import javax.servlet.http.HttpServlet;
    7. import javax.servlet.http.HttpServletRequest;
    8. import javax.servlet.http.HttpServletResponse;
    9. import org.apache.commons.fileupload.FileItem;
    10. import org.apache.commons.fileupload.FileUploadException;
    11. import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
    12. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    13. import org.apache.commons.fileupload.servlet.ServletFileUpload;
    14. public class FileUploadServlet extends HttpServlet {
    15. private static final long serialVersionUID = 2827297299439162553L;
    16. public void doGet(HttpServletRequest request, HttpServletResponse response)
    17. throws ServletException, IOException {
    18. //使用同一种处理方法
    19. doPost(request, response);
    20. }
    21. public void doPost(HttpServletRequest request, HttpServletResponse response)
    22. throws ServletException, IOException {
    23. request.setCharacterEncoding("UTF-8");
    24. response.setContentType("text/html; charset=UTF-8");
    25. //保存路径
    26. String savePath = getServletContext().getRealPath("/upload");
    27. File saveDir = new File(savePath);
    28. // 如果目录不存在,就创建目录
    29. if(!saveDir.exists()){
    30. saveDir.mkdir();
    31. }
    32. // 创建文件上传核心类
    33. DiskFileItemFactory factory = new DiskFileItemFactory();
    34. ServletFileUpload sfu = new ServletFileUpload(factory);
    35. //设置编码
    36. sfu.setHeaderEncoding("UTF-8");
    37. // 设置上传的单个文件的最大字节数为2M
    38. sfu.setFileSizeMax(1024*1024*2);
    39. //设置整个表单的最大字节数为10M
    40. sfu.setSizeMax(1024*1024*10);
    41. try{
    42. // 处理表单请求
    43. List<FileItem> itemList = sfu.parseRequest(request);
    44. for (FileItem fileItem : itemList) {
    45. // 对应表单中的控件的name
    46. String fieldName = fileItem.getFieldName();
    47. System.out.println("控件名称:" + fieldName);
    48. // 如果是普通表单控件
    49. if(fileItem.isFormField()){
    50. String value = fileItem.getString();
    51. //重新编码,解决乱码
    52. value = new String(value.getBytes("ISO-8859-1"),"UTF-8");
    53. System.out.println("普通内容:" + fieldName + "=" + value);
    54. // 上传文件
    55. }else{
    56. // 获得文件大小
    57. Long size = fileItem.getSize();
    58. // 获得文件名
    59. String fileName = fileItem.getName();
    60. System.out.println("文件名:"+fileName+"\t大小:" + size + "byte");
    61. //设置不允许上传的文件格式
    62. if(fileName.endsWith(".exe")){
    63. request.setAttribute("msg", "不允许上传的类型!");
    64. }else{
    65. //将文件保存到指定的路径
    66. File file = new File(savePath,fileName);
    67. fileItem.write(file);
    68. request.setAttribute("msg", "上传成功!");
    69. }
    70. }
    71. }
    72. }catch(FileSizeLimitExceededException e){
    73. request.setAttribute("msg", "文件太大");
    74. }catch(FileUploadException e){
    75. e.printStackTrace();
    76. }catch(Exception e){
    77. e.printStackTrace();
    78. }
    79. //上传完毕后  转发到首页
    80. request.getRequestDispatcher("/index.jsp").forward(request, response);
    81. }
    82. }

JSP Servlet学习笔记——使用fileupload上传文件的更多相关文章

  1. Python+Selenium学习笔记10 - send_keys上传文件

    在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...

  2. FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输

    fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,wi ...

  3. jsp&servlet学习笔记

    1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...

  4. JSP/Serlet 使用fileupload上传文件

    需要引用的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar index.jsp <body> <center> <h ...

  5. linux学习笔记-linux主机上传下载文件至linux虚拟机的方法

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.上传文件 scp -r file 用户名@ip地址:目标目录 2.下载文件 scp -r 用户名@ip地址:文件 目标目录

  6. Web安全测试学习笔记-DVWA-图片上传

    很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了. 我用DVWA的文 ...

  7. 解决COS、FileUpload上传文件时中文文件名乱码问题

    方法: MultipartParser mp = new MultipartParser(request, 10*1024*1024); mp.setEncoding("GBK") ...

  8. SpringMVC使用FileUpload上传文件

    进口FileUpload和common-io的Jar包 注意:1.Struts2其它方法需要使用的:struts2过滤,将改变reqeust类型,由HttpServletRequest成为MultiP ...

  9. 工作笔记4.struts2上传文件到server

    本文介绍两种:上传文件到server的方式   一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完毕文件上传,我们应该将这 ...

随机推荐

  1. [转载]Browser Link feature in Visual Studio Preview 2013

    http://blogs.msdn.com/b/webdev/archive/2013/07/29/10430221.aspx Browser Link feature in Visual Studi ...

  2. javascript使用事件委托

    事件委托是javascript中一个很重要的概念,其基本思路就是利用了事件冒泡的机制,给上级(父级)元素触发事件的dom对象上绑定一个处理函数.在当有需要很多dom对象要绑定事件的情况下,可以使用事件 ...

  3. JavaScript1.6数组新特性和JQuery的几个工具方法

    JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 .这些方法已经被写进了ECMA262 V5.现代浏览器(IE9/Firefox/ ...

  4. AngularJS入门基础——表达式

    表达式在AngularJS应用中广泛的使用,因此深入理解AngularJS如何使用并运算表达式是非常重要的.   表达式和eval非常相似,但是由于表达式由AngularJS来处理,它们有已下显著不同 ...

  5. 20155225 2016-2017-2 《Java程序设计》第八周学习总结

    20155225 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志API 国际化基础 规则表达式 JDK8增强功能 教材学习中的问题和解决过程 ...

  6. python技巧 合并两个字典

    python 3.5+ 版本 In [1]: a={'x':2,'y':4} In [2]: b={'c':1,'d':3} In [3]: c={'c':3,'y':6} In [4]:  w={* ...

  7. 第6月第4天 AVMutableComposition AVMutableVideoComposition

    1. AVMutableComposition is a mutable subclass of AVComposition you use when you want to create a new ...

  8. 无锁并发框架Disruptor学习入门

    刚刚听说disruptor,大概理一下,只为方便自己理解,文末是一些自己认为比较好的博文,如果有需要的同学可以参考. 本文目标:快速了解Disruptor是什么,主要概念,怎么用 1.Disrupto ...

  9. SSH 公钥登录

    一般使用SSH进行远程登录时需要提供密码,这也是我们所熟知的一种方式. 另外,就是通过公钥登录的方式,本文将简要介绍公钥登录的两种方法,建议使用方法二.本文也将简单演示公钥登录过程,以及强制使用公钥和 ...

  10. FFT(Rock Paper Scissors Gym - 101667H)

    题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...