接收文件
@PostMapping
public result<String> add(MultipartFile file) throws IOException {
// 得到目标文件夹
File directory = new File("file");
//如果文件夹不存在就创建
if(!directory.exists()){
directory.mkdirs();
}
//文件名称
String fileName = file.getOriginalFilename();
//得到文件的存放路径 ---directory.getCanonicalPath() 文件夹全路径 --- File.separator:分隔符
String filePath = directory.getCanonicalPath() + File.separator + fileName;
// 创建新文件对象,指定文件路径为新路径
File desc = new File(filePath);
// 将前端发过来的文件输送给新文件 完成存入
file.transferTo(desc);
return result.success("success");
}
发送文件
@GetMapping("/{url}")
public void pdf(@PathVariable String url, HttpServletResponse response) throws IOException {
//文件所在文件夹
File directory = new File("file");
//文件路径
String filePath = directory.getCanonicalPath() + File.separator + url;
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
//StringBuilder().append拼接字符串性能更高
String header = new StringBuilder().append("attachment;filename=")
.append(fileName).toString();
//响应的内容类型为"application/octet-stream",这是一种通用的二进制数据格式。
response.setContentType("application/octet-stream");
// content-type 指示响应内容的格式
//
// content-disposition 指示如何处理响应内容。
//
// 一般有两种方式:
//
// inline:直接在页面显示
// attchment:以附件形式下载
response.addHeader("Content-disposition", header);
//响应内容不会被压缩传输,而是直接发送给客户端。
response.addHeader("Transfer-Encoding", null);
//表示在响应完成后,连接将被立即关闭,不再进行后续的数据交换。
response.addHeader("connection", "close");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//得到文件
File file = new File(filePath);
FileInputStream in = null;
OutputStream out = null;
try {
//读取文件
in = new FileInputStream(file1);
out = response.getOutputStream();
IOUtils.copy(in, out);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(out);
IOUtils.closeQuietly(in);
}
}