在互联网时代,文件的上传和下载是日常工作中不可或缺的环节。Java作为一种广泛使用的编程语言,提供了多种方式来实现文件的上传和下载。本文将详细介绍Java中实现文件上传和下载的实用代码与技巧,帮助你轻松掌握文件传输。
一、Java文件上传
1. 使用FileUpload类
FileUpload类是Java提供的一个简单易用的文件上传组件。以下是一个使用FileUpload类实现文件上传的示例代码:
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置文件上传的最大大小为5MB
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(5 * 1024 * 1024);
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = item.getName();
File file = new File("upload/" + fileName);
item.write(file);
item.delete();
}
}
response.getWriter().println("文件上传成功!");
}
}
2. 使用MultipartFile接口
Spring框架提供了MultipartFile接口,可以方便地处理文件上传。以下是一个使用MultipartFile接口实现文件上传的示例代码:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileUploadController {
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
try {
String fileName = file.getOriginalFilename();
File saveFile = new File("upload/" + fileName);
file.transferTo(saveFile);
return "文件上传成功:" + fileName;
} catch (IOException e) {
e.printStackTrace();
return "文件上传失败!";
}
}
}
二、Java文件下载
1. 使用HttpServletResponse输出流
以下是一个使用HttpServletResponse输出流实现文件下载的示例代码:
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class FileDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = "example.txt";
File file = new File("download/" + fileName);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ServletOutputStream os = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
}
}
}
2. 使用Spring框架的Resource接口
以下是一个使用Spring框架的Resource接口实现文件下载的示例代码:
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FileDownloadController {
@GetMapping("/download/{fileName:.+}")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) {
Resource resource = new UrlResource("classpath:download/" + fileName);
if (resource.exists()) {
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
.body(resource);
} else {
return ResponseEntity.notFound().build();
}
}
}
三、总结
本文详细介绍了Java中实现文件上传和下载的实用代码与技巧。通过学习本文,你可以轻松掌握文件传输,为你的项目开发带来便利。在实际应用中,你可以根据具体需求选择合适的方法,并结合其他技术实现更加复杂的文件上传和下载功能。
