package test.servlet.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
public class UploadServlet extends HttpServlet{
Logger logger = Logger.getLogger(UploadServlet.class);
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//得到文件保存目录
String savePath = this.getServletContext().getRealPath("/upload");
File file = new File(savePath);
System.out.println("目录:"+savePath);
if(!file.exists() && !file.isDirectory()){
System.out.println("目录不存在,需创建");
file.mkdir();
}
String message = "";
try {
//Apache文件上传组件处理文件上传步骤:
//创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
//判断提交的数据是狗是上传表单的数据
if(! ServletFileUpload.isMultipartContent(request)){
return;
}
//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for(FileItem item :list){
//普通数据项
if(item.isFormField()){
String name = item.getFieldName();
String value = item.getString("utf-8");
System.out.println(name+"="+value);
}else {
//封装的是上传文件
String filename = item.getName();
System.out.println(filename);
if(filename.isEmpty()){
continue;
}
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
//获取item中的文件输入流
InputStream in = item.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath +"\\"+filename);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//创建一个输入流结束标识
int len = 0;
//将输入流读入缓冲区中
while((len = in.read(buffer))>0 ){
out.write(buffer,0,len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();
//删除临时文件
item.delete();
message ="文件上传成功";
}
}
} catch (Exception e) {
message="上传失败";
e.printStackTrace();
}
request.setAttribute("message", message);
request.getRequestDispatcher("/WEB-INF/common/message.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
doGet(request, response);
}
}
/*1.创建一个文件项目工厂类DiskFileItemFactory。
DiskFileItemFactory有俩个构造方法:
1 DiskFileItemFactory() 其中sizeThreshold是默认值10kB, 文件大小不超过这个值将内容保存在内存,超过这个值会把文件保存到临时目录下,可用System.getProperty("java.io.tmpdir")获取;
2 DiskFileItemFactory(int sizeThreshold, File repository) 可以指定sizeThreshold, 和文件保存到磁盘的路径。
DiskFileItemFactory有一个属性FileCleaningTracker,设置这个属性可以用来追踪删除临时文件。
当这个临时文件不再被使用时将会被立即删除,更精确的说是这个文件对象被垃圾收集器回收时,
FileCleaningTracker将启动收获者线程(reaper thread)自动删除这个临时文件。FileCleaningTracker是commons-io包的工具类。
FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(servletcontext);
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setFileCleaningTracker(fileCleaningTracker);
ServletContext获取的几种方法:
Javax.servlet.http.HttpSession.getServletContext();
Javax.servlet.jsp.PageContext.getServletContext();
Javax.servlet.ServletConfig.getServletContext();
2.创建一个文件处理类ServletFileUpload。
ServletFileUpload解析上传请求request的信息,封装到FileItem类中,我们通过FileItem可以获取文件的名称、大小、文件流等信息。
ServletFileUpload sfu = new ServletFileUpload(factory);
ServletFileUpload可以设置:
headerEncoding 读取请求头信息时使用的编码
sizeMax 单次请求所能上传的文件总大小的最大size,默认是-1,不限制大小
fileSizeMax 单次请求所能上传的单个文件最大size,默认是-1,不限制大小
List<FileItem> items = sfu.parseRequest(req);
3.FileCleanerCleanup实现了ServletContextListener监听类,在web启动时调用ServletContext.setAttribute()方法设置了一个全局共享的FileCleaningTracker对象。
*/
/*
1、文件上传请求头
* Accept text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection keep-alive
Content-Length 463
Content-Type multipart/form-data; boundary=---------------------------99723099725366
Cookie JSESSIONID=D4A2424B913862CB2B2BD5F0CBE54AB1; __utma=111872281.2098552496.1495013100.1495013100.1495017526
.2; __utmz=111872281.1495013100.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Host localhost:8090
Referer http://localhost:8090/FileUploadDown/
Upgrade-Insecure-Requests 1
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
2、form的post数据提交
-----------------------------99723099725366
Content-Disposition: form-data; name="username"
kk
-----------------------------99723099725366
Content-Disposition: form-data; name="file1"; filename="pythonå®è£
.txt"
Content-Type: text/plain
ÅäÖû·¾³±äÁ¿£º
E:\software\python2.7.13;E:\software\python2.7.13\Scripts
°²×°¿â:
pip install MySQLdb
pip install bs4
pip install BeautifulSoup
pip install lxml
-----------------------------99723099725366--
*/
没有合适的资源?快使用搜索试试~ 我知道了~
文件上传、下载代码,servlet版本、springmvc版本
共44个文件
xml:14个
jsp:7个
java:6个
需积分: 10 154 下载量 84 浏览量
2017-06-19
16:24:13
上传
评论 1
收藏 41KB ZIP 举报
温馨提示
文件上传、下载的具体代码,包含servlet版本、springmvc版本
资源推荐
资源详情
资源评论
收起资源包目录
FIleUploadDown.zip (44个子文件)
FIleUploadDown
pom.xml 4KB
target
test-classes
m2e-wtp
web-resources
META-INF
maven
example.com
FileUploadDown
pom.xml 4KB
pom.properties 256B
MANIFEST.MF 107B
classes
test
servlet
servlet
UploadServlet.class 5KB
DownLoadServlet.class 3KB
DownListServlet.class 2KB
controller
UploadController.class 2KB
service
UploadService.class 2KB
TestServlet.class 1KB
spring
springmvc.xml 3KB
applicationContext-dao.xml 2KB
applicationContext-service.xml 901B
applicationContext-util.xml 313B
applicationContext.xml 625B
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.wst.common.component 698B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.validation.prefs 50B
.jsdtscope 639B
org.eclipse.jdt.core.prefs 430B
src
main
webapp
WEB-INF
list.jsp 970B
web.xml 3KB
common
top.jsp 393B
message.jsp 180B
spring-file-multi.jsp 581B
index.jsp 581B
spring-file.jsp 504B
download.jsp 254B
resources
spring
springmvc.xml 3KB
applicationContext-dao.xml 2KB
applicationContext-service.xml 901B
applicationContext-util.xml 313B
applicationContext.xml 625B
java
test
servlet
servlet
DownLoadServlet.java 3KB
UploadServlet.java 7KB
DownListServlet.java 1KB
controller
UploadController.java 1KB
service
UploadService.java 2KB
TestServlet.java 542B
.project 1KB
.classpath 1KB
共 44 条
- 1
资源评论
csdnindex
- 粉丝: 47
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- predict.ipynb
- 软件开发:C++技术实现KTV点歌系统设计与交互体验
- PCF8591T芯片DA实验_单片机C语言实例(纯C语言源代码).zip
- [学校班级]FI同学录ficlass 1.1.2_ficlass112.rar
- [信息办公]BugFree1.0正式版_bugfree10.rar
- 软件消抖的独立式键盘输入实验_单片机C语言实例(纯C语言源代码).zip
- 基于DIT的FFT的实现-课程设计.doc
- UCI常用数据集,UCI常用数据集,UCI常用数据集
- [主机域名]Sofee米表程序_sofeedomainnameportfolio_v101.rar
- [Android实例] Android 竖着的SeekBar.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功