一. 后端
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Controller
@RequestMapping("/file")
public class FileDownLoadController {
// 下载页面初始化
@RequestMapping("/init")
public ModelAndView init() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("fileDownload");
return modelAndView;
}
// 获取文件名称或者文件路径
@GetMapping("/getFileName")
@ResponseBody
public String getFileName() {
String fileName = Stream.of("1.txt", "2.txt", "3.txt")
.collect(Collectors.joining(","));
return fileName;
}
// 下载文件
@GetMapping("/manyFileDownLoad/{fileName}")
public void manyFileDownLoad(@PathVariable("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
// 保存在本地磁盘中的文件
File file = new File("C:\Users\xxx\Desktop\downloadFile\" + fileName);
FileInputStream fileInputStream = null;
try {
response.setHeader("content-type", "application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
// 设置响应类型
response.setContentType("application/x-download");
// 读取本地的文件
fileInputStream = new FileInputStream(file);
// 根据response对象构造一个输出流对象,然后将输入流的对象写入输出流
OutputStream os = response.getOutputStream();
// 直接将文件一口气写入输出流中(文件不大的话,直接写入就行)
os.write(fileInputStream.readAllBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
fileInputStream.close();
}
}
}
}
二. 前端
文件下载
三. 效果