servlet+jsp实现文件上传下载
时间: 2023-09-21 17:10:34 浏览: 50
文件上传下载是Web开发中常见的功能,可以通过servlet+jsp实现。下面是一个简单的示例:
1. 文件上传
在jsp页面中,使用form表单向servlet提交文件:
```html
<form method="post" action="UploadServlet" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
```
在servlet中,使用Apache Commons FileUpload来处理文件上传:
```java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 检查是否是文件上传请求
if (!ServletFileUpload.isMultipartContent(request)) {
response.getWriter().println("不是文件上传请求");
return;
}
// 创建文件上传工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小,超过这个大小的文件将被写入临时文件
factory.setSizeThreshold(1024 * 1024 * 10); // 10MB
// 设置临时文件存放目录
File tmpDir = new File("tmp");
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
factory.setRepository(tmpDir);
// 创建文件上传处理器
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的大小限制
upload.setFileSizeMax(1024 * 1024 * 100); // 100MB
// 解析上传文件
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
// 保存上传文件
String fileName = item.getName();
String destPath = "upload/" + fileName;
File destFile = new File(destPath);
item.write(destFile);
}
}
response.getWriter().println("上传成功");
} catch (Exception e) {
e.printStackTrace();
response.getWriter().println("上传失败");
}
}
```
2. 文件下载
在jsp页面中,使用a标签指向servlet,并将要下载的文件名作为参数:
```html
<a href="DownloadServlet?fileName=test.txt">下载</a>
```
在servlet中,读取要下载的文件并将文件内容输出到response中:
```java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");
String filePath = "upload/" + fileName;
File file = new File(filePath);
if (!file.exists()) {
response.getWriter().println("文件不存在");
return;
}
// 设置响应头,让浏览器下载文件
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setContentType("application/octet-stream");
// 输出文件内容
InputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
in.close();
out.close();
}
```
以上就是一个简单的servlet+jsp文件上传下载实现。当然,这只是一个基础示例,实际应用中还需要考虑更多的情况,比如文件的安全性、文件的命名规则等等。