网站首页 > 技术文章 正文
一、什么是fileUpload?
fileUpload是apache的commons组件提供的上传组件,它最主要的工作就是帮我们解析request.getInpustream()。可以参考在线API文档:
http://tool.oschina.net/apidocs/apidoc?api=commons-fileupload
二、fileupload组件工作原理
三、fileupload核心API
1. DiskFileItemFactory
构造器
1) DiskFileItemFactory() // 使用默认配置
2) DiskFileItemFactory(int sizeThreshold, File repository)
sizeThreshold 内存缓冲区, 不能设置太大, 否则会导致JVM崩溃
repository 临时文件目录
2. ServletFileUpload
1) isMutipartContent(request) // 判断上传表单是否为multipart/form-data类型 true/false
2) parseRequest(request) // 解析request, 返回值为List<FileItem>类型
3) isFormField() //是否是普通文件
4) setFileSizeMax(long) // 上传文件单个最大值 fileupload内部通过抛出异常的形式处理, 处理文件大小超出限制, 可以通过捕获这个异常, 提示给用户
5) setSizeMax(long) // 上传文件总量最大值
6) setHeaderEncoding(String) // 设置编码格式
四、实现过程
1.导入jar包
2.编写jsp
3.编写servlet
//创建业务层对象
NewsService newsService = new NewsService();
InputStream in = null;
OutputStream out = null;
int id = 0;//页面传来的id值
//创建解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//获取解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 上传表单是否为multipart/form-data类型
if(!upload.isMultipartContent(request)) {
return ;
}
//解析request的输入流
try {
List<FileItem> parseRequest = upload.parseRequest(request);
//迭代list
for(FileItem f:parseRequest) {
if(f.isFormField()) {
//普通字段
id = Integer.parseInt(f.getFieldName());
String value = f.getString();
System.out.println("name"+"="+value);
}else {
//上传文件
//获取上传文件名
String name = f.getName();
System.out.println("文件名"+name);
name = name.substring(name.lastIndexOf("\\")+1);
System.out.println(name);
//获取输入流
in = f.getInputStream();
//获取上传文件路径
String savePath = "D:\\workspacedt91\\FileUpLoadTestDemo\\WebContent\\images\\"+name;
//上传文件名若不存在, 则先创建
File path = new File(savePath);
if(!path.exists()) {
path.getParentFile().mkdir();
}
//获取输出流
out = new FileOutputStream(path);
int len = 0;
byte[] b = new byte[1024];
while((len = in.read(b)) > 0) {
out.write(b,0,len);
}
System.out.println("上传成功");
//保存到数据库
int count = newsService.saveUrl(name, id);
if(count > 0 ) {
System.out.println("路径保存成功");
}else {
System.out.println("路径保存失败");
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
System.out.println("上传失败");
e.printStackTrace();
}finally {
if(in != null) {
in.close();
}
if(out != null) {
out.close();
}
}
- 上一篇: Java代码审计之不安全的Java代码
- 下一篇: springboot 整合分布式文件存储服务器
猜你喜欢
- 2025-05-28 教你一招快速入门网络编程
- 2025-05-28 有了这些开源工具后,明天争取五点下班了!
- 2025-05-28 十年老架构师:带你读懂springmvc的世界!
- 2025-05-28 一招搞定外部请求,这款 HTTP 客户端框架真的很强大!
- 2025-05-28 一文搞定FastDFS的搭建和使用
- 2025-05-28 动态代理 because it is a JDK dynamic proxy that implements
- 2025-05-28 基于Python的数据导出和邮件发送
- 2025-05-28 快来试试这款一行代码实现多平台文件存储的工具!
- 2025-05-28 PDF文件添加二维码水印
- 2025-05-28 HttpClient PostAsync 应用指南
- 06-13C++之类和对象(c++中类和对象的区别)
- 06-13C语言进阶教程:数据结构 - 哈希表的基本原理与实现
- 06-13C语言实现见缝插圆游戏!零基础代码思路+源码分享
- 06-13Windows 10下使用编译并使用openCV
- 06-13C语言进阶教程:栈和队列的实现与应用
- 06-13C语言这些常见标准文件该如何使用?很基础也很重要
- 06-13C语言 vs C++:谁才是编程界的“全能王者”?
- 06-13C语言无锁编程指南(c语言锁机代码)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)