Springboot+Vue实现文件下载功能
之前写文件下载功能,看网上的代码很复杂,不容易懂(网上的博客越来越没水平,不知道是不是百度搜索引擎的问题),其实挺简单的,下面我分享下代码及效果
后端
package com.example.longye.controller;
import ch.qos.logback.core.net.SyslogOutputStream;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
@RestController
@CrossOrigin
public class File_Download {
//实现Spring Boot 的文件下载功能,映射网址为/download
@RequestMapping("/download")
public String downloadFile(HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
String name=request.getParameter("filename");
// 获取指定目录下的第t个文件
File scFileDir = new File("C:\\images");
File TrxFiles[] = scFileDir.listFiles();
for(int t=0;t<TrxFiles.length;t++) {
if (TrxFiles[t].getName().equals(name)) {
String fileName = TrxFiles[t].getName(); //下载的文件名
// 如果文件名不为空,则进行下载
if (fileName != null) {
//设置文件路径
String realPath = "C://images/";
File file = new File(realPath, fileName);
// 如果文件名存在,则进行下载
if (file.exists()) {
// 配置文件下载
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
// 下载文件能正常显示中文
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 实现文件下载
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
System.out.println("Download the song successfully!");
}
catch (Exception e) {
System.out.println("Download the song failed!");
}
finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
return null;
}
}
## 前端
html部分:
js部分
See (name) {
if(name!=null){
window.location.href ='http://localhost:8001/download?filename='+name; // 跳转链接
}else{
this.$router.push({path: '/HelloWorld'})
}