Servlet的文件上传
以下内容引用自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的文件上传相关推荐
- servlet实现文件上传,预览,下载和删除
一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数据转 ...
- html网页上传到服务器_JSP+Servlet实现文件上传到服务器功能
本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao.service.servlet 这 ...
- jsp 如何上传文件到服务器上,如何使用JSP / Servlet将文件上传到服务器?
问题: How can I upload files to server using JSP/Servlet? 如何使用JSP / Servlet将文件上传到服务器? I tried this: 我尝 ...
- c语言 上传图片至服务器,JSP+Servlet实现文件上传到服务器功能
本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao.service.servlet 这 ...
- 如何用JSP+Servlet实现文件上传下载
目录 一.辛老师教程 一.需要的文件: 二.上传步骤: 三.下载步骤 二.代码 1.前端 2.后端 3.web.xml 三.梳理框架 1.前端 2.后端 一.辛老师教程 一.需要的文件: (3条消息) ...
- java基于servlet的文件上传
研究了一天终于将java上传文件看懂了,当然懂的仅仅是皮毛,不妨记下来防止以后忘了. 我们在网上看关于文件的上传有很多的介绍,当然有的可以使用有的则不合适:我们首先来看前台的界面 <!DOCTY ...
- ajax servlet增删改查,Servlet ajax 文件上传和JDBC+Servler用户表增删改查
昨天晚上帮一个妹子,应该是大二或者大三的.解决了Servlet+JDBC实现用户表的增删改查功能,当时妹子遇到的问题是文件上传和日期格式处理不太会. 我让她把代码发我,我本地调试,结果发现坑很多,就是 ...
- Servlet实现文件上传
Servlet3.0开始新增了Part接口,专门用来处理文件上传. package javax.servlet.http;import java.io.IOException; import java ...
- 转载tangl_99的Servlet 实现文件上传下载--自己的一点心得
这个周末终于可以好好锻炼一下我的IBM ThinkPad T43了.今天看了一些关于JSP,Servlet方面的资料,写了简单的两个JavaBean.一个是UpLoad,一个是DownLoad.写得很 ...
最新文章
- python输入多个数字后续操作_有效地确定后续数字范围中的数字是否在有序列表中. (在Python中)...
- Aquaculture:天津农科院谢凤行团队揭示菌群预测功能与实际代谢特性的相关性...
- WEB应用程序逻辑架构
- java全文检索的框架_lucene框架全文检索搜索引擎方案
- 因为代言一款游戏 罗永浩和网友吵起来了
- mongo数据库和mysql数据库的区别_Mongodb与mysql数据库的区别
- 底薪80万挖来一个大公司高管
- 【matlab】结构体
- 20180514 ++i和i++
- rabbitmq python 发送失败_RabbitMQ Python端发送消息给Java端 接受消息全数字问题
- 开源电子书项目FBReader初探(一)
- 框架内(React)网页打印的实现
- github国内镜像站
- 系统分析与设计之用例图
- PyTorch实战使用Resnet迁移学习
- OpenAI chatGPT火爆出圈,世界悄悄发生着变化
- jvm内存模型与垃圾回收
- 字节跳动 Flink 单点恢复功能及 Regional CheckPoint 优化实践
- 控制寄存器(CR0,CR1,CR2,CR3)
- Android如何用release包抓包
热门文章
- scikit-learn中随机森林使用详解
- AxureRP9不同Page使用同一个Master,触发不同事件。
- 网络爬虫之java基础篇QueryRunner(Ⅲ)
- 机器学习之朴素贝叶斯算法原理
- 哈达玛变换的应用SATD、SAD等匹配算法
- VS2013+OpenCV3.0编译CMT跟踪算法
- Windows Media Player播放器 VC++ 2008
- 高性能 php api 开发,ThinkPHP 3.2 性能优化,实现高性能API开发
- 如何在linux上创建数据库,在LINUX平台上手动创建数据库(oracle 10g)
- ios 表情符号 键盘_ios – 将键盘布局更改为表情符号