Servlet文件上传
来源:互联网 发布:做不喜欢的事 知乎 编辑:程序博客网 时间:2024/06/05 10:03
本文转自http://blog.csdn.net/qq_34092336/article/details/77061899
欢迎大家访问原博并点赞。
Servlet3中的Part接口和@MultipartConfig注解使文件上传变得非常简单,本文对文件上传相关代码进行讲解。
开发工具:Intellij IDEA、tomcat9.0
(开发工具很随意,使用eclipse+tomcat8等都可以完成工作)
上传文件当然首先要提供一个可视界面,这里我们在web目录下新建文件index.jsp。要想上传文件,需要注意的是须设置表单的enctype属性值为multipart/form-data,就像这样:enctype="multipart/form-data" ,下面贴出index.jsp的源代码:
<%-- Created by IntelliJ IDEA. User: cbw Date: 2017/8/10 Time: 10:10 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>upload</title> </head> <body> <h1>Select file to upload</h1> <form action="singleUpload" enctype="multipart/form-data" method="post"> Author:<input type="text" name="author"/><br> Select file:<input type="file" name="filename"/><br> <input type="submit" value="upload"> </form> </body></html>
我们注意到上面form的action提交到了singleUpload里,所以这里我们要新建一个Servlet,我新建的是SingleUploadServlet,我们先贴出代码片,再对代码进行讲解。
import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;import java.io.IOException;import java.io.PrintWriter;/** * Created by cbw on 2017/8/10. */@WebServlet(name = "SingleUploadServlet",urlPatterns = {"/singleUpload"})@MultipartConfigpublic class SingleUploadServlet extends HttpServlet { private static final long serialVersionUID=8593038L; private String getFilename(Part part){ String contentDispositionHeader=part.getHeader("content-disposition"); String[]elements=contentDispositionHeader.split(";"); for(String element:elements){ if (element.trim().startsWith("filename")){ return element.substring(element.indexOf('=')+1).trim().replace("\"",""); } } return null; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part part=request.getPart("filename");String fileName=getFilename(part);Part part=request.getPart("filename"); String fileName=getFilename(part); if(fileName!=null && !fileName.isEmpty()){ part.write("D:\\IDEA\\project\\upload\\web\\images"+"/"+fileName); } response.setContentType("text/html"); PrintWriter writer=response.getWriter(); writer.print("<br/>Name:"+fileName); writer.print("<br/>Size:"+part.getSize()); String author=request.getParameter("author"); writer.print("<br/>Author:"+author); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }}
首先我们要给该Servlet加上两个注解:
@WebServlet(name = "SingleUploadServlet",urlPatterns = {"/singleUpload"})@MultipartConfig
@WebServlet用于接受index.jsp中form传过来的action
@MultipartConfig用于文件传送
由于我们提交表单的方法是post,这里我们在doPost函数中完成上传的服务器端操作。
主要的思路是:先把file取出来放到一个Part里,再写入我们要存放的位置,我们来看这两句代码:
Part part=request.getPart("filename");String fileName=getFilename(part);
注意这里的filename并不是文件的真实名字,是建立jsp和servlet传递数据的参数名,我们如果想要获得原始文件名,需要getFileName()这个方法,然后再通过这样的语句,几行代码写入:
"D:\\IDEA\\project\\upload\\web\\images"是你要写入的位置
if(fileName!=null && !fileName.isEmpty()){ part.write("D:\\IDEA\\project\\upload\\web\\images"+"/"+fileName);}
下面我们来看getFileName方法。
值得一提的是,当上传一个123.png文件时,我们取出的标头格式是下面这样的(可以自行打印验证):
content-disposition:form-data;name="document";filename="123.png"
所以我们要获得的便是123.png这个字段,相关对字符串的操作方法,这里不作说明。
这样我们就完成了文件上传的操作。
我这里的所有代码都是自己运行通过了的,如果很不幸您的程序出了bug,请访问下载该项目的源代码:
https://github.com/alwaysbeloved/upload
- Flex + servlet 上传文件
- JSP+servlet上传文件
- servlet文件上传
- Servlet文件上传
- Servlet上传文件
- 文件上传servlet应用
- jsp servlet文件上传
- 文件上传Servlet实例
- Servlet文件上传代码
- java servlet 文件上传
- servlet中的文件上传
- 文件上传Servlet例子
- Servlet实现文件上传
- Servlet 上传文件(转)
- Servlet实现文件上传
- servlet之上传文件
- servlet 文件上传
- servlet 上传excel文件
- ListView多条目加载和ImageLoader
- 《UNIX环境高级编程》笔记4--open函数,create函数,close函数
- Lumion 6.5.1 Pro下载 64位免费版
- Tomcat服务器的常用配置
- Git常用的几个命令
- Servlet文件上传
- 简单记忆(一)
- Shell 数组
- android 蓝牙开发
- es5 es6 互相转换
- java学习第19天
- 尊重师道
- 更智能,更利落,更快速,新版IntelliJ IDEA 即将登场
- C# TableLayoutPanel让一个控件占两行或者两列