Java使用commons-fileupload实现文件上传与下载实例解析
简介
在web应用中,文件上传与下载是一个必不可少的功能。本文将演示使用commons-fileupload实现文件上传与下载的完整攻略,并提供两个示例来说明实现过程。
涉及技术
- Java
- Tomcat
- Maven
- commons-fileupload
文件上传
1. 添加依赖
使用Maven来导入commons-fileupload依赖:
<dependencies>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
2. 文件上传表单
在HTML表单中添加enctype="multipart/form-data"
属性:
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
3. 实现上传功能
在Servlet中实现文件上传,示例代码如下:
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file");
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
OutputStream out = null;
InputStream fileContent = null;
try {
out = new FileOutputStream(new File("upload/" + fileName));
fileContent = filePart.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = fileContent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
response.getWriter().append("File uploaded successfully!");
} catch (FileNotFoundException e) {
response.getWriter().append("File upload failed!");
} finally {
if (out != null) {
out.close();
}
if (fileContent != null) {
fileContent.close();
}
}
}
}
在Servlet中,通过@MultipartConfig
注解来指定处理请求中的文件内容,通过request.getPart("file")
方法获取文件Part对象,并通过Part.getSubmittedFileName()
方法获取文件名。接着就可以用标准IO操作将文件保存到指定路径。
文件下载
1. 添加依赖
使用Maven来导入下载所需依赖(可选):
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>
</dependencies>
2. 实现下载功能
在Servlet中实现文件下载,示例代码如下:
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filePath = "upload/demo.txt";
File downloadFile = new File(filePath);
if (downloadFile.exists()) {
String mimeType = Files.probeContentType(downloadFile.toPath());
if (mimeType == null) {
mimeType = "application/octet-stream";
}
response.setContentType(mimeType);
response.setHeader("Content-Length", String.valueOf(downloadFile.length()));
response.setHeader("Content-Disposition", "attachment; filename=" + downloadFile.getName());
Files.copy(downloadFile.toPath(), response.getOutputStream());
} else {
response.getWriter().append("File not found!");
}
}
}
在Servlet中,直接通过响应输出流将文件内容读取后写入到响应中即可。通过Files.probeContentType()
方法获取文件类型,并通过响应头中的"Content-Disposition"字段指定下载时的文件名。
注意事项
- 建议限制上传文件大小和类型,以防止用户上传不安全的文件;
- 建议使用相对路径和Web应用程序的上下文路径来保存和读取文件,以避免跨平台问题。
示例
下面提供两个示例,一个用于上传文件,一个用于下载文件。
上传文件示例
上传文件示例代码请下载这个 Maven 工程并导入到您的IDE中。在Tomcat容器中启动该应用程序,并在浏览器的地址栏中输入以下网址:
http://localhost:8080/myfileupload/upload.jsp
选中文件后点击"Upload"按钮即可上传文件,上传的文件将保存在Web应用程序的"upload"文件夹中。
下载文件示例
下载文件示例代码请下载这个 Maven 工程并导入到您的IDE中。在Tomcat容器中启动该应用程序,并在浏览器的地址栏中输入以下网址:
http://localhost:8080/myfiledownload/download
点击下载按钮即可下载名为"demo.txt"的文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA使用commos-fileupload实现文件上传与下载实例解析 - Python技术站