Servlet实现文件上传:getReader(), getInputStream(), getPart()与getParts(...
105 浏览量
更新于2024-09-01
收藏 72KB PDF 举报
"这篇教程介绍了如何使用Servlet处理文件上传,主要涵盖了通过`getReader()`、`getInputStream()`以及`getPart()`和`getParts()`方法的不同实现方式。"
在Java Web开发中,Servlet是一个用于扩展服务器功能的Java类,特别适用于处理HTTP请求。当涉及到文件上传时,Servlet提供了一套API来接收并处理这些请求。本教程以四个示例(Demo)阐述了如何使用Servlet来完成文件上传任务。
一、使用`getReader()`和`getInputStream()`
在传统的方式中,如果上传的文件与表单数据混合在一起,可以使用`getReader()`读取文本数据,但处理文件上传时通常使用`getInputStream()`。在Demo1中:
1. HTML表单采用`POST`方法提交,并设置`enctype="multipart/form-data"`,这是处理文件上传所必需的。
2. 表单包含一个`<input type="file">`元素,用户可以选择要上传的文件。
3. Servlet部分,继承自`HttpServlet`,重写`doPost()`方法。在这里,`HttpServletRequest`的`getInputStream()`方法被用来读取上传的文件内容。然后,使用`DataInputStream`和`FileOutputStream`将接收到的数据写入到服务器的某个位置。
```java
//简化版Servlet处理代码
try {
DataInputStream input = new DataInputStream(request.getInputStream());
FileOutputStream fileOut = new FileOutputStream("/path/to/save/file");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
fileOut.write(buffer, 0, bytesRead);
}
fileOut.close();
input.close();
} catch (IOException e) {
// 处理异常
}
```
这种方式虽然简单,但没有处理文件名、大小等信息,且不适用于多个文件上传。
二、使用`getPart()`和`getParts()`
自Java Servlet 3.0起,提供了更高级的API来处理文件上传。`HttpServletRequest`提供了`getPart()`和`getParts()`方法,它们可以方便地获取上传的单个或多个文件。
- `getPart(String name)`:根据文件字段名获取`Part`对象,每个`Part`代表一个文件。
- `getParts()`:返回`Part`对象的`Enumeration`,适合处理多个文件上传。
使用`Part`对象,可以获取文件名、大小等信息,同时提供了`write()`方法直接写入到服务器文件系统,简化了文件保存的逻辑。
```java
Part filePart = request.getPart("filename");
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
InputStream fileContent = filePart.getInputStream();
try (OutputStream out = new FileOutputStream("/path/to/save/" + fileName)) {
byte[] buffer = new byte[1024];
int read;
while ((read = fileContent.read(buffer)) > 0) {
out.write(buffer, 0, read);
}
} catch (IOException e) {
// 处理异常
}
```
以上就是使用Servlet处理文件上传的基本方法,无论是使用`getInputStream()`的原始方式,还是使用`getPart()`和`getParts()`的现代API,都需要注意文件上传的安全性和错误处理,如文件大小限制、非法文件类型检查以及异常捕获。在实际项目中,通常会结合使用Multipart解析库,如Apache Commons FileUpload或Spring的MultipartFile,以提供更强大的文件上传功能。
2016-07-06 上传
2013-10-30 上传
211 浏览量
2011-06-16 上传
2019-05-25 上传
2014-05-14 上传
2013-02-22 上传
2017-02-13 上传
weixin_38734361
- 粉丝: 6
- 资源: 904
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库