对于Spring MVC实现文件上传和下载的完整攻略,包含以下几个步骤:
步骤一:添加依赖
从Maven仓库中获取所需的依赖,这里只列出需要的主要依赖:
<!-- 文件上传 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<!-- 文件下载 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
步骤二:实现文件上传
下面是一个示例代码,其中使用了CommonsMultipartResolver
解析文件上传请求。MultipartFile
对象代表上传的文件,通过transferTo()
方法可以将文件保存到本地磁盘上。
@Controller
@RequestMapping("/upload")
public class FileUploadController {
// 使用CommonsMultipartResolver解析文件上传请求
@Autowired
private CommonsMultipartResolver multipartResolver;
@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (multipartResolver.isMultipart(request)) {
try {
// 获取文件名,用于在本地磁盘保存文件
String fileName = file.getOriginalFilename();
// 如果文件名重复,则在文件名后添加时间戳
File localFile = new File(fileName);
int i = 1;
while (localFile.exists()) {
localFile = new File(fileName.split(".")[0] + "_" + i + "." + fileName.split(".")[1]);
i++;
}
// 保存文件到本地磁盘
file.transferTo(localFile);
// 返回上传成功页面
return "uploadSuccess";
} catch (IOException e) {
e.printStackTrace();
}
}
return "uploadFailure";
}
}
步骤三:实现文件下载
下面是一个示例代码,其中使用了FileResponse
封装了文件下载响应体。FileUtils
类来自于“Apache Commons IO”依赖,用于将文件字节流写入到响应体中。
@Controller
@RequestMapping("/download")
public class FileDownloadController {
@GetMapping("/")
public ResponseEntity<FileResponse> getFile(@RequestParam("fileName") String fileName) {
File file = new File(fileName);
if (file.exists()) {
try {
// 使用“Application/octet-stream”指定响应体的媒体类型,表示可任意二进制文件下载
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// 将响应体设定为指定文件的字节流
headers.setContentDispositionFormData("attachment", file.getName());
// 使用“FileResponse”封装响应体
FileResponse fileResponse = new FileResponse(FileUtils.readFileToByteArray(file), headers);
// 返回响应主体
return new ResponseEntity<>(fileResponse, HttpStatus.OK);
} catch (IOException e) {
e.printStackTrace();
}
}
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
@AllArgsConstructor
public static class FileResponse {
private byte[] bytes;
private HttpHeaders headers;
// getter and setter...
}
}
以上就是Spring MVC实现文件上传和下载的完整攻略,若您需要详细了解,可以参考以下两个示例代码,分别对应了文件上传和文件下载功能:
文件上传示例代码:https://github.com/linjiajian999/SpringMVC-FileUpload
文件下载示例代码:https://github.com/linjiajian999/SpringMVC-FileDownload
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC实现文件上传和下载 - Python技术站