以下内容引用自http://wiki.jikexueyuan.com/project/servlet/file-uploading.html:

Servlet可以与HTML form标签一起使用允许用户将文件上传到服务器。上传的文件可以是文本文件或图像文件或任何文档。

一、创建一个文件上传表单

下述HTML代码创建了一个文件上传表单。以下是需要注意的几点:

  • 表单method属性应该设置为POST方法且不能使用GET方法。

  • 表单enctype属性应该设置为multipart/form-data。

  • 表单action属性应该设置为Servlet文件,能够在后端服务器处理文件上传。下面的例子是使用UploadServlet Servlet来上传文件的。

  • 要上传单个文件,应该使用单个带有属性type=“file”的<input .../>标签。为了允许多个文件上传,要包含多个带有name属性不同值的输入标签。浏览器将把一个浏览按钮和每个输入标签关联起来。
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="50" />
<br />
<input type="submit" value="Upload File" />
</form>
</body>
</html>

这将显示如下所示的结果,允许从本地计算机中选择一个文件,当用户点击“上传文件”时,表单会和选择的文件一起提交:

二、编写后台Servlet

以下是Servlet UploadServlet,会接受上传的文件并把它储存在目录<Tomcat-installation-directory>/webapps/data中。使用外部配置,如web.xml中的context-param元素,这个目录名也可以被添加,如下所示:

<web-app>
....
<context-param> <description>Location to store uploaded file</description> <param-name>file-upload</param-name> <param-value>c:\apache-tomcat-5.5.29\webapps\data\</param-value>
</context-param>
....
</web-app>

以下是UploadServlet的源代码,可以一次处理多个文件的上传。在继续操作之前,请确认下列各项:

  • 下述例子依赖于FileUpload,所以一定要确保在classpath中有最新版本的commons-fileupload.x.x.jar 文件。可以从http://commons.apache.org/fileupload/中下载。

  • FileUpload依赖于Commons IO,所以一定要确保在classpath中有最新版本的commons-io-x.x.jar文件。可以从http://commons.apache.org/io/中下载。

  • 在测试下面实例时,上传的文件大小不能大于maxFileSize,否则文件将无法上传。

  • 请确保已经提前创建好目录c:\temp and c:\apache-tomcat-5.5.29\webapps\data。

POM项目可以添加如下依赖:

        <!-- commons-fileupload --><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.2</version></dependency><!-- commons-io --><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency>

编写Servlet:

//Import required java libraries
import java.io.*;
import java.util.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.output.*;public class UploadServlet extends HttpServlet {private boolean isMultipart;private String filePath;private int maxFileSize = 50 * 1024;private int maxMemSize = 4 * 1024;private File file;public void init() {// Get the file location where it would be stored.filePath = getServletContext().getInitParameter("file-upload");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {// Check that we have a file upload requestisMultipart = ServletFileUpload.isMultipartContent(request);response.setContentType("text/html");java.io.PrintWriter out = response.getWriter();if (!isMultipart) {out.println("<html>");out.println("<head>");out.println("<title>Servlet upload</title>");out.println("</head>");out.println("<body>");out.println("<p>No file uploaded</p>");out.println("</body>");out.println("</html>");return;}DiskFileItemFactory factory = new DiskFileItemFactory();// maximum size that will be stored in memory
        factory.setSizeThreshold(maxMemSize);// Location to save data that is larger than maxMemSize.factory.setRepository(new File("c:\\temp"));// Create a new file upload handlerServletFileUpload upload = new ServletFileUpload(factory);// maximum file size to be uploaded.
        upload.setSizeMax(maxFileSize);try {// Parse the request to get file items.List fileItems = upload.parseRequest(request);// Process the uploaded file itemsIterator i = fileItems.iterator();out.println("<html>");out.println("<head>");out.println("<title>Servlet upload</title>");out.println("</head>");out.println("<body>");while (i.hasNext()) {FileItem fi = (FileItem) i.next();if (!fi.isFormField()) {// Get the uploaded file parametersString fieldName = fi.getFieldName();String fileName = fi.getName();String contentType = fi.getContentType();boolean isInMemory = fi.isInMemory();long sizeInBytes = fi.getSize();// Write the fileif (fileName.lastIndexOf("\\") >= 0) {file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\")));} else {file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\") + 1));}fi.write(file);out.println("Uploaded Filename: " + fileName + "<br>");}}out.println("</body>");out.println("</html>");} catch (Exception ex) {System.out.println(ex);}}public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {throw new ServletException("GET method used with " + getClass().getName() + ": POST method required.");}
}

三、编译和运行Servlet

编译上述Servlet UploadServlet并在web.xml文件中创建所需的条目,如下所示:

<servlet><servlet-name>UploadServlet</servlet-name><servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>UploadServlet</servlet-name><url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>

现在尝试使用上面创建的HTML表单来上传文件。当访问http://localhost:8080/UploadFile.htm时,它会显示如下所示的结果,这将有助于从本地计算机中上传任何文件。

如果Servelt脚本能正常工作,那么文件会被上传到c:\apache-tomcat-5.5.29\webapps\data\目录中。

测试工程:https://github.com/easonjim/5_java_example/tree/master/servletbasics/test11

转载于:https://www.cnblogs.com/EasonJim/p/6977597.html

Servlet的文件上传相关推荐

  1. servlet实现文件上传,预览,下载和删除

    一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数据转 ...

  2. html网页上传到服务器_JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao.service.servlet 这 ...

  3. jsp 如何上传文件到服务器上,如何使用JSP / Servlet将文件上传到服务器?

    问题: How can I upload files to server using JSP/Servlet? 如何使用JSP / Servlet将文件上传到服务器? I tried this: 我尝 ...

  4. c语言 上传图片至服务器,JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao.service.servlet 这 ...

  5. 如何用JSP+Servlet实现文件上传下载

    目录 一.辛老师教程 一.需要的文件: 二.上传步骤: 三.下载步骤 二.代码 1.前端 2.后端 3.web.xml 三.梳理框架 1.前端 2.后端 一.辛老师教程 一.需要的文件: (3条消息) ...

  6. java基于servlet的文件上传

    研究了一天终于将java上传文件看懂了,当然懂的仅仅是皮毛,不妨记下来防止以后忘了. 我们在网上看关于文件的上传有很多的介绍,当然有的可以使用有的则不合适:我们首先来看前台的界面 <!DOCTY ...

  7. ajax servlet增删改查,Servlet ajax 文件上传和JDBC+Servler用户表增删改查

    昨天晚上帮一个妹子,应该是大二或者大三的.解决了Servlet+JDBC实现用户表的增删改查功能,当时妹子遇到的问题是文件上传和日期格式处理不太会. 我让她把代码发我,我本地调试,结果发现坑很多,就是 ...

  8. Servlet实现文件上传

    Servlet3.0开始新增了Part接口,专门用来处理文件上传. package javax.servlet.http;import java.io.IOException; import java ...

  9. 转载tangl_99的Servlet 实现文件上传下载--自己的一点心得

    这个周末终于可以好好锻炼一下我的IBM ThinkPad T43了.今天看了一些关于JSP,Servlet方面的资料,写了简单的两个JavaBean.一个是UpLoad,一个是DownLoad.写得很 ...

最新文章

  1. python输入多个数字后续操作_有效地确定后续数字范围中的数字是否在有序列表中. (在Python中)...
  2. Aquaculture:天津农科院谢凤行团队揭示菌群预测功能与实际代谢特性的相关性...
  3. WEB应用程序逻辑架构
  4. java全文检索的框架_lucene框架全文检索搜索引擎方案
  5. 因为代言一款游戏 罗永浩和网友吵起来了
  6. mongo数据库和mysql数据库的区别_Mongodb与mysql数据库的区别
  7. 底薪80万挖来一个大公司高管
  8. 【matlab】结构体
  9. 20180514 ++i和i++
  10. rabbitmq python 发送失败_RabbitMQ Python端发送消息给Java端 接受消息全数字问题
  11. 开源电子书项目FBReader初探(一)
  12. 框架内(React)网页打印的实现
  13. github国内镜像站
  14. 系统分析与设计之用例图
  15. PyTorch实战使用Resnet迁移学习
  16. OpenAI chatGPT火爆出圈,世界悄悄发生着变化
  17. jvm内存模型与垃圾回收
  18. 字节跳动 Flink 单点恢复功能及 Regional CheckPoint 优化实践
  19. 控制寄存器(CR0,CR1,CR2,CR3)
  20. Android如何用release包抓包

热门文章

  1. scikit-learn中随机森林使用详解
  2. AxureRP9不同Page使用同一个Master,触发不同事件。
  3. 网络爬虫之java基础篇QueryRunner(Ⅲ)
  4. 机器学习之朴素贝叶斯算法原理
  5. 哈达玛变换的应用SATD、SAD等匹配算法
  6. VS2013+OpenCV3.0编译CMT跟踪算法
  7. Windows Media Player播放器 VC++ 2008
  8. 高性能 php api 开发,ThinkPHP 3.2 性能优化,实现高性能API开发
  9. 如何在linux上创建数据库,在LINUX平台上手动创建数据库(oracle 10g)
  10. ios 表情符号 键盘_ios – 将键盘布局更改为表情符号