1. 通过getInputStream()取得上传文件。
002 |
* To change this template, choose Tools | Templates |
003 |
* and open the template in the editor. |
005 |
package net.individuals.web.servlet; |
007 |
import java.io.DataInputStream; |
008 |
import java.io.FileOutputStream; |
009 |
import java.io.IOException; |
010 |
import javax.servlet.ServletException; |
011 |
import javax.servlet.annotation.WebServlet; |
012 |
import javax.servlet.http.HttpServlet; |
013 |
import javax.servlet.http.HttpServletRequest; |
014 |
import javax.servlet.http.HttpServletResponse; |
020 |
@WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
021 |
public class UploadServlet extends HttpServlet { |
024 |
* Processes requests for both HTTP |
025 |
* <code>GET</code> and |
026 |
* <code>POST</code> methods. |
028 |
* @param request servlet request |
029 |
* @param response servlet response |
030 |
* @throws ServletException if a servlet-specific error occurs |
031 |
* @throws IOException if an I/O error occurs |
033 |
protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
034 |
throws ServletException, IOException { |
035 |
response.setContentType( "text/html;charset=UTF-8" ); |
037 |
byte [] body = readBody(request); |
039 |
String textBody = new String(body, "ISO-8859-1" ); |
041 |
String fileName = getFileName(textBody); |
043 |
Position p = getFilePosition(request, textBody); |
045 |
writeTo(fileName, body, p); |
054 |
public Position( int begin, int end) { |
060 |
private byte [] readBody(HttpServletRequest request) throws IOException { |
062 |
int formDataLength = request.getContentLength(); |
063 |
//取得ServletInputStream输入流对象 |
064 |
DataInputStream dataStream = new DataInputStream(request.getInputStream()); |
065 |
byte body[] = new byte [formDataLength]; |
067 |
while (totalBytes < formDataLength) { |
068 |
int bytes = dataStream.read(body, totalBytes, formDataLength); |
074 |
private Position getFilePosition(HttpServletRequest request, String textBody) throws IOException { |
076 |
String contentType = request.getContentType(); |
077 |
String boundaryText = contentType.substring(contentType.lastIndexOf( "=" ) + 1 , contentType.length()); |
079 |
int pos = textBody.indexOf( "filename=\"" ); |
080 |
pos = textBody.indexOf( "\n" , pos) + 1 ; |
081 |
pos = textBody.indexOf( "\n" , pos) + 1 ; |
082 |
pos = textBody.indexOf( "\n" , pos) + 1 ; |
083 |
int boundaryLoc = textBody.indexOf(boundaryText, pos) - 4 ; |
084 |
int begin = ((textBody.substring( 0 , pos)).getBytes( "ISO-8859-1" )).length; |
085 |
int end = ((textBody.substring( 0 , boundaryLoc)).getBytes( "ISO-8859-1" )).length; |
087 |
return new Position(begin, end); |
090 |
private String getFileName(String requestBody) { |
091 |
String fileName = requestBody.substring(requestBody.indexOf( "filename=\"" ) + 10 ); |
092 |
fileName = fileName.substring( 0 , fileName.indexOf( "\n" )); |
093 |
fileName = fileName.substring(fileName.indexOf( "\n" ) + 1 , fileName.indexOf( "\"" )); |
098 |
private void writeTo(String fileName, byte [] body, Position p) throws IOException { |
099 |
FileOutputStream fileOutputStream = new FileOutputStream( "e:/workspace/" + fileName); |
100 |
fileOutputStream.write(body, p.begin, (p.end - p.begin)); |
101 |
fileOutputStream.flush(); |
102 |
fileOutputStream.close(); |
105 |
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> |
108 |
* <code>GET</code> method. |
110 |
* @param request servlet request |
111 |
* @param response servlet response |
112 |
* @throws ServletException if a servlet-specific error occurs |
113 |
* @throws IOException if an I/O error occurs |
116 |
protected void doGet(HttpServletRequest request, HttpServletResponse response) |
117 |
throws ServletException, IOException { |
118 |
processRequest(request, response); |
123 |
* <code>POST</code> method. |
125 |
* @param request servlet request |
126 |
* @param response servlet response |
127 |
* @throws ServletException if a servlet-specific error occurs |
128 |
* @throws IOException if an I/O error occurs |
131 |
protected void doPost(HttpServletRequest request, HttpServletResponse response) |
132 |
throws ServletException, IOException { |
133 |
processRequest(request, response); |
137 |
* Returns a short description of the servlet. |
139 |
* @return a String containing servlet description |
142 |
public String getServletInfo() { |
143 |
return "Short description" ; |
2. 通过getPart()、getParts()取得上传文件。
002 |
* To change this template, choose Tools | Templates |
003 |
* and open the template in the editor. |
005 |
package net.individuals.web.servlet; |
007 |
import java.io.FileNotFoundException; |
008 |
import java.io.FileOutputStream; |
009 |
import java.io.IOException; |
010 |
import java.io.InputStream; |
011 |
import java.io.OutputStream; |
012 |
import javax.servlet.ServletException; |
013 |
import javax.servlet.annotation.MultipartConfig; |
014 |
import javax.servlet.annotation.WebServlet; |
015 |
import javax.servlet.http.HttpServlet; |
016 |
import javax.servlet.http.HttpServletRequest; |
017 |
import javax.servlet.http.HttpServletResponse; |
018 |
import javax.servlet.http.Part; |
025 |
@WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
026 |
public class UploadServlet extends HttpServlet { |
029 |
* Processes requests for both HTTP |
030 |
* <code>GET</code> and |
031 |
* <code>POST</code> methods. |
033 |
* @param request servlet request |
034 |
* @param response servlet response |
035 |
* @throws ServletException if a servlet-specific error occurs |
036 |
* @throws IOException if an I/O error occurs |
038 |
protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
039 |
throws ServletException, IOException { |
040 |
Part part = request.getPart( "photo" ); |
041 |
String fileName = getFileName(part); |
042 |
writeTo(fileName, part); |
046 |
private String getFileName(Part part) { |
047 |
String header = part.getHeader( "Content-Disposition" ); |
048 |
String fileName = header.substring(header.indexOf( "filename=\"" ) + 10 , header.lastIndexOf( "\"" )); |
054 |
private void writeTo(String fileName, Part part) throws IOException, FileNotFoundException { |
055 |
InputStream in = part.getInputStream(); |
056 |
OutputStream out = new FileOutputStream( "e:/workspace/" + fileName); |
057 |
byte [] buffer = new byte [ 1024 ]; |
059 |
while ((length = in.read(buffer)) != - 1 ) { |
060 |
out.write(buffer, 0 , length); |
067 |
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> |
070 |
* <code>GET</code> method. |
072 |
* @param request servlet request |
073 |
* @param response servlet response |
074 |
* @throws ServletException if a servlet-specific error occurs |
075 |
* @throws IOException if an I/O error occurs |
078 |
protected void doGet(HttpServletRequest request, HttpServletResponse response) |
079 |
throws ServletException, IOException { |
080 |
processRequest(request, response); |
085 |
* <code>POST</code> method. |
087 |
* @param request servlet request |
088 |
* @param response servlet response |
089 |
* @throws ServletException if a servlet-specific error occurs |
090 |
* @throws IOException if an I/O error occurs |
093 |
protected void doPost(HttpServletRequest request, HttpServletResponse response) |
094 |
throws ServletException, IOException { |
095 |
processRequest(request, response); |
099 |
* Returns a short description of the servlet. |
101 |
* @return a String containing servlet description |
104 |
public String getServletInfo() { |
105 |
return "Short description" ; |
另一种较为简单的方法:
02 |
* To change this template, choose Tools | Templates |
03 |
* and open the template in the editor. |
05 |
package net.individuals.web.servlet; |
07 |
import java.io.IOException; |
08 |
import java.io.PrintWriter; |
09 |
import javax.servlet.ServletException; |
10 |
import javax.servlet.annotation.MultipartConfig; |
11 |
import javax.servlet.annotation.WebServlet; |
12 |
import javax.servlet.http.HttpServlet; |
13 |
import javax.servlet.http.HttpServletRequest; |
14 |
import javax.servlet.http.HttpServletResponse; |
15 |
import javax.servlet.http.Part; |
18 |
*采用part的wirte(String fileName)上传,浏览器将产生临时TMP文件。 |
21 |
@MultipartConfig (location = "e:/workspace" ) |
22 |
@WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
23 |
public class UploadServlet extends HttpServlet { |
26 |
* Processes requests for both HTTP |
27 |
* <code>GET</code> and |
28 |
* <code>POST</code> methods. |
30 |
* @param request servlet request |
31 |
* @param response servlet response |
32 |
* @throws ServletException if a servlet-specific error occurs |
33 |
* @throws IOException if an I/O error occurs |
35 |
protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
36 |
throws ServletException, IOException { |
38 |
request.setCharacterEncoding( "UTF-8" ); |
39 |
Part part = request.getPart( "photo" ); |
40 |
String fileName = getFileName(part); |
45 |
private String getFileName(Part part) { |
46 |
String header = part.getHeader( "Content-Disposition" ); |
47 |
String fileName = header.substring(header.indexOf( "filename=\"" ) + 10 , header.lastIndexOf( "\"" )); |
51 |
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> |
54 |
* <code>GET</code> method. |
56 |
* @param request servlet request |
57 |
* @param response servlet response |
58 |
* @throws ServletException if a servlet-specific error occurs |
59 |
* @throws IOException if an I/O error occurs |
62 |
protected void doGet(HttpServletRequest request, HttpServletResponse response) |
63 |
throws ServletException, IOException { |
64 |
processRequest(request, response); |
69 |
* <code>POST</code> method. |
71 |
* @param request servlet request |
72 |
* @param response servlet response |
73 |
* @throws ServletException if a servlet-specific error occurs |
74 |
* @throws IOException if an I/O error occurs |
77 |
protected void doPost(HttpServletRequest request, HttpServletResponse response) |
78 |
throws ServletException, IOException { |
79 |
processRequest(request, response); |
83 |
* Returns a short description of the servlet. |
85 |
* @return a String containing servlet description |
88 |
public String getServletInfo() { |
89 |
return "Short description" ; |
使用getParts()上传多个文件:
02 |
To change this template, choose Tools | Templates |
03 |
and open the template in the editor. |
09 |
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > |
13 |
< form action = "UploadServlet3" method = "POST" enctype = "multipart/form-data" > |
16 |
< td >< label for = "file1" >文件1:</ label ></ td > |
17 |
< td >< input type = "file" id = "file1" name = "file" ></ td > |
20 |
< td >< label for = "file2" >文件2:</ label ></ td > |
21 |
< td >< input type = "file" id = "file2" name = "file" ></ td > |
24 |
< td >< label for = "file3" >文件3:</ label ></ td > |
25 |
< td >< input type = "file" id = "file3" name = "file" ></ td > |
28 |
< td colspan = "2" >< input type = "submit" value = "上传" name = "upload" ></ td > |
对应Servlet代码:
02 |
* To change this template, choose Tools | Templates |
03 |
* and open the template in the editor. |
05 |
package net.individuals.web.servlet; |
07 |
import java.io.IOException; |
08 |
import java.io.PrintWriter; |
09 |
import javax.servlet.ServletException; |
10 |
import javax.servlet.annotation.MultipartConfig; |
11 |
import javax.servlet.annotation.WebServlet; |
12 |
import javax.servlet.http.HttpServlet; |
13 |
import javax.servlet.http.HttpServletRequest; |
14 |
import javax.servlet.http.HttpServletResponse; |
15 |
import javax.servlet.http.Part; |
21 |
@MultipartConfig (location = "e:/workspace" ) |
22 |
@WebServlet (name = "UploadServlet" , urlPatterns = { "/UploadServlet" }) |
23 |
public class UploadServlet extends HttpServlet { |
26 |
* Processes requests for both HTTP |
27 |
* <code>GET</code> and |
28 |
* <code>POST</code> methods. |
30 |
* @param request servlet request |
31 |
* @param response servlet response |
32 |
* @throws ServletException if a servlet-specific error occurs |
33 |
* @throws IOException if an I/O error occurs |
35 |
protected void processRequest(HttpServletRequest request, HttpServletResponse response) |
36 |
throws ServletException, IOException { |
37 |
request.setCharacterEncoding( "utf-8" ); |
38 |
//迭代Collection中所有Part对象 |
39 |
for (Part part : request.getParts()) { |
41 |
if (part.getName().startsWith( "file" )) { |
42 |
String fileName = getFileName(part); |
48 |
private String getFileName(Part part) { |
49 |
String header = part.getHeader( "Content-Disposition" ); |
50 |
String fileName = header.substring(header.indexOf( "filename=\"" ) + 10 , header.lastIndexOf( "\"" )); |
51 |
header.lastIndexOf( "\"" ); |
55 |
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> |
58 |
* <code>GET</code> method. |
60 |
* @param request servlet request |
61 |
* @param response servlet response |
62 |
* @throws ServletException if a servlet-specific error occurs |
63 |
* @throws IOException if an I/O error occurs |
66 |
protected void doGet(HttpServletRequest request, HttpServletResponse response) |
67 |
throws ServletException, IOException { |
68 |
processRequest(request, response); |
73 |
* <code>POST</code> method. |
75 |
* @param request servlet request |
76 |
* @param response servlet response |
77 |
* @throws ServletException if a servlet-specific error occurs |
78 |
* @throws IOException if an I/O error occurs |
81 |
protected void doPost(HttpServletRequest request, HttpServletResponse response) |
82 |
throws ServletException, IOException { |
83 |
processRequest(request, response); |
87 |
* Returns a short description of the servlet. |
89 |
* @return a String containing servlet description |
92 |
public String getServletInfo() { |
93 |
return "Short description" ; |
- Servlet实现文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip : 点击打开链接 2) commons- ...
- java常见3种文件上传速度对比和文件上传方法详细代码
在java里面文件上传的方式很多,最简单的依然是FileInputStream.FileOutputStream了,在这里我列举3种常见的文件上传方法代码,并比较他们的上传速度(由于代码是在本地测试, ...
- Servlet实现文件上传,可多文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...
- 配置servlet支持文件上传
Servlet3.0为Servlet添加了multipart配置选项,并为HttpServletRequest添加了getPart和getParts方法获取上传文件.为了使Servlet支付文件上传需 ...
- jsp+servlet实现文件上传下载
相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- java commons-fileupload servlet 多文件上传
commons-fileupload servlet 多文件上传 需要引入的 jar 包. commons-fileupload-1.3.2.jar commons-io-2.2.jar 工程路劲:查 ...
- Servlet之文件上传
上传表单中的注意事项: 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法 表单 enctype 属性应该设置为multipart/form-data 下面的实例是借助于com ...
- 使用FileUpload实现Servlet的文件上传
简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...
- servlet实现文件上传,预览,下载和删除
一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数 ...
随机推荐
- 理解ValueStack的基本机制 OGNL表达式
ValueStack基础:OGNL(Object Graphic Navigatino Language) OGNL是Struts2中使用的一种表达式语言. 它可以用于,在JSP页面,使用标签方便的访 ...
- 在Windows Server 2012 R2域环境中禁用(取消)密码复杂策略
windows server 2012域环境默认启用密码复杂策略,例如: 至少有六个字符长,包含以下四类字符中的三类字符:英文大写字母(A 到 Z),英文小写字母(a 到 z),10 个基本数字(0 ...
- 基于vs2012的C# winform抽奖小程序的总结
哈希表的使用 Hashtable hashtable = new Hashtable(); hashtable.ContainsValue(tmp);//判断哈希表中有没有tmp hashtable. ...
- php不用递归完成无限分类,从表设计入手完整演示过程
无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, ...
- eclipse创建Maven工程没有Maven Dependencies
记一次eclipse创建Maven工程没有Maven Dependencies的坑 Eclipse版本:luna版 maven用的3.5.0 配置本文不提. 这辆天用Eclipse创建maven工程 ...
- NPOI 导出excel 通用方法
public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T& ...
- Python 获取秒级时间戳与毫秒级时间戳
原文:Python获取秒级时间戳与毫秒级时间戳 1.获取秒级时间戳与毫秒级时间戳 import time import datetime t = time.time() print (t) #原始时间 ...
- Socket编程概念
一.网路套接字 在通信过程中,套接字是成对存在的,该套接字内部借助两个缓冲区实现 二.网络字序 1.存储方式 大端法(网络):高位存低位,低位存高位 小端法(本地):高位存高位,低位存低位 2.网络字 ...
- leetcode 91. 解码方法 JAVA
题目: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. ...
- 我与网站的日常-webshell命令执行
本文比较基础,其中有一个知识点关于php执行系统命令的函数 ,我们用最简单的webshell来说说传值问题的影响, 本文作者: i春秋签约作家——屌丝绅士 0×01前言: 小表弟又来写文章了,这 ...