接下来我将详细讲解 SpringBoot 文件或图片上传与下载功能的实现攻略。
1. 文件上传
1.1 前端实现
前端代码中需要添加一个上传文件的表单及其相关事件处理。可以使用HTML5自带的 FormData 类,一步步向后台传输数据。代码示例如下:
<form id="fileUploadForm">
<input type="file" name="upfile"/>
<input type="button" value="上传" onclick="upload()"/>
</form>
function upload() {
var formData = new FormData($('#fileUploadForm')[0]);
$.ajax({
url: "/upload",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function (data) {
alert('上传成功!');
},
error: function () {
alert('上传失败!');
}
});
}
1.2 后端实现
在 SpringBoot 中,我们可以使用 Spring MVC 的注解来实现上传文件的功能。可以使用 @RequestParam 注解与 MultipartFile 类来接收前端传来的文件。代码示例如下:
@PostMapping("/upload")
public String upload(@RequestParam("upfile") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "请选择一个文件进行上传。");
return "redirect:/uploadStatus";
}
try {
byte[] bytes = file.getBytes();
String fileName = file.getOriginalFilename();
Path path = Paths.get(UPLOAD_FOLDER + fileName);
// 文件保存到本地
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message",
"文件 " + fileName + " 上传成功。");
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/uploadStatus";
}
其中,我们可以使用 Files.write() 方法将文件保存到本地。UPLOAD_FOLDER 变量是存储上传文件的文件夹路径。
2. 文件下载
2.1 前端实现
前端代码中需要添加一个下载文件的链接,点击此链接时会向后台请求下载该文件。代码示例如下:
<a href="/download?filename=xxx.xxx">下载文件</a>
2.2 后端实现
在 SpringBoot 中,我们可以使用 HttpServletResponse 的方法来实现下载文件的功能。如下代码示例中,我们可以使用 FileInputStream 读取文件,并使用 HttpServletResponse 的 setContentType() 和 setHeader() 方法来设置下载的文件格式与文件名。最后,将文件以流的方式写入 HttpServletResponse 中,实现文件下载。
@GetMapping("/download")
public void downloadFile(HttpServletRequest request, HttpServletResponse response) {
String fileName = request.getParameter("filename");
String filePath = UPLOAD_FOLDER + fileName;
File file = new File(filePath);
if (!file.exists()) {
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
response.setContentType("text/html; charset=UTF-8");
outputStream.write("文件不存在!".getBytes());
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return;
}
try (
InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = response.getOutputStream()
) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
以上就是 SpringBoot 文件或图片上传与下载功能的实现攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 文件或图片上传与下载功能的实现 - Python技术站