Javaweb实现上传下载文件的多种方法攻略
在开发Javaweb应用时,文件的上传和下载是非常常见的需求。本文将介绍Javaweb实现上传下载文件的多种方法,并提供两个代码示例。
上传文件的几种方式
1. 使用Servlet API实现文件上传
使用Servlet API实现文件上传需要使用标准的 javax.servlet
库中配套的 HttpServletRequest
和 Part
接口。使用 HttpServletRequest.getParts()
方法可以获取上传的所有文件,而一个上传的文件对应一个 Part
对象。以下是一个示例代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Collection<Part> parts = request.getParts();
for (Part part : parts) {
String fileName = extractFileName(part);
part.write(savePath + fileName);
}
}
private String extractFileName(Part part) {
String contentDisposition = part.getHeader("content-disposition");
String[] items = contentDisposition.split(";");
for (String item : items) {
if (item.trim().startsWith("filename")) {
return item.substring(item.indexOf("=") + 2, item.length() - 1);
}
}
return "";
}
2. 使用Apache Commons FileUpload实现文件上传
使用Apache Commons FileUpload工具包实现文件上传非常方便,除了需要增加依赖,大部分代码都可以由该工具包的类库来完成。以下是一个示例代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
item.write(new File(savePath + File.separator + fileName));
}
}
}
下载文件的几种方式
1. 使用Servlet API实现文件下载
使用Servlet API实现文件下载需要在 Servlet 中设置响应内容为文件类型,并设置响应报文头,包括文件名和响应类型。以下是一个示例代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filePath = request.getParameter("filePath");
String fileName = extractFileName(filePath);
File file = new File(filePath);
ServletContext context = getServletContext();
String mimeType = context.getMimeType(filePath);
if (mimeType == null) {
mimeType = "application/octet-stream";
}
response.setContentType(mimeType);
response.setContentLength((int) file.length());
String headerKey = "Content-Disposition";
String headerValue = String.format("attachment; filename=\"%s\"", fileName);
response.setHeader(headerKey, headerValue);
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
}
private String extractFileName(String path) {
int separatorIndex = path.lastIndexOf("/");
return separatorIndex < 0 ? path : path.substring(separatorIndex + 1);
}
2. 使用Spring WebMVC框架实现文件下载
使用 Spring WebMVC 框架实现文件下载非常方便,只需要返回一个 ResponseEntity<byte[]>
类型的对象即可。以下是一个示例代码:
@GetMapping("/download")
public ResponseEntity<byte[]> downloadFile(@RequestParam("filePath") String filePath) throws IOException {
File file = new File(filePath);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", file.getName());
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
byte[] byteArray = Files.readAllBytes(file.toPath());
return new ResponseEntity<>(byteArray, headers, HttpStatus.OK);
}
以上就是 Javaweb 实现上传下载文件的多种方法的攻略和代码示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javaweb实现上传下载文件的多种方法 - Python技术站