Servlet实现文件上传:getReader(), getInputStream(), getPart()与getParts(...
127 浏览量
更新于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,以提供更强大的文件上传功能。
点击了解资源详情
点击了解资源详情
点击了解资源详情
211 浏览量
2011-06-16 上传
2019-05-25 上传
2014-05-14 上传
2013-02-22 上传
weixin_38734361
- 粉丝: 6
- 资源: 904
最新资源
- XML文档对象模型(XML DOM)研究与应用
- DWR中文教程适合初学开发人员的最佳文档
- 新版设计模式手册[C#].pdf
- Professional JavaScript For Web Developers 2nd edition
- ibatis开发指南(含基础、高级部分)
- Beginning ASP.NET E Commerce In C Sharp From Novice To Professional
- Learning the vi and Vim Editors 7th Edition Jul 2008
- 网络工程的验收与鉴定.doc
- CSS.Mastery.Advanced.Web.Standards.Solutions.pdf
- AD与DA转换的pdf详细文档
- extjs详细教程-中文版
- 電腦做什麼事 0 序章 關於電腦
- 英语学习英语的资料,不是图片,视频
- Web_Service开发指南
- c#的习题,绝对实用,不下后悔
- MCTS70-640SelfPacedTrainingKit.pdf