spring下载上传文件
下载文件
@GetMapping("downloadImg")
public ResponseEntity<byte[]> downloadImg(HttpServletRequest request) {
String realPath = request.getServletContext().getRealPath("upload/2.jpg");
byte[] bytes;
try {
FileInputStream fileInputStream = new FileInputStream(realPath);
bytes = new byte[fileInputStream.available()];
int read = fileInputStream.read(bytes);
} catch (IOException e) {
throw new RuntimeException(e);
}
//告知浏览器,我的流是一个 附件 (文件),浏览器触发下载
HttpHeaders httpHeaders = new HttpHeaders();
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
System.out.println(fileName);
httpHeaders.setContentDispositionFormData("attachment", fileName);
//返回对象
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, httpHeaders, HttpStatus.OK);
return responseEntity;
}
乱码解决:获取文件名的时候,将文件名转为utf-8格式:
String encode = URLEncoder.encode(fileName, "UTF-8");
下载rar文件如下:
@GetMapping("downLoadTxt")
public ResponseEntity<byte[]> downLoadTxt(HttpServletRequest request){
//获取要下载的文件地址
String realPath = request.getServletContext().getRealPath("upload/新建文本文档.txt");
byte[] bytes;
String fileName;
try {
//将文件转为字节流对象
FileInputStream fileInputStream = new FileInputStream(realPath);
//定义接收字节流对象的数组
bytes = new byte[fileInputStream.available()];
//读取字节流
int read = fileInputStream.read(bytes);
//获取文件名并且将文件名编码格式改为utf-8
fileName = URLEncoder.encode(realPath.substring(realPath.lastIndexOf("\\")+1),"UTF-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
//告诉浏览器,出发下载
HttpHeaders httpHeaders = new HttpHeaders();
//设置浏览器下载附件,传入文件名
httpHeaders.setContentDispositionFormData("attachment",fileName);
//返回响应实体,字节流数组,下载附件,状态
return new ResponseEntity<byte[]>(bytes,httpHeaders,HttpStatus.OK);
}
文件上传:
单个文件上传:
@PostMapping("/myUpload")
public String upload(HttpServletRequest request) {
String upload = request.getServletContext().getRealPath("/upload");
File file = new File(upload);
if (!file.exists()) file.mkdirs();
try {
Part uploadFile = request.getPart("file");
String submittedFileName = uploadFile.getSubmittedFileName();
uploadFile.write(upload + new Date().getTime() + submittedFileName);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ServletException e) {
throw new RuntimeException(e);
}
request.setAttribute("msg", "上传成功");
return "forward:/pages/success.jsp";
}
@PostMapping("/file")//http://localhost:8088/file
public String uploadFile(@RequestBody MultipartFile file, HttpServletRequest request) throws IOException {
//获取存储的绝对路径,此处放到img目录下面
String realPath = request.getServletContext().getRealPath("upload/");
//获取文件名
String originalFilename = file.getOriginalFilename();
//文件传输
file.transferTo(Paths.get(realPath + new Date().getTime() + originalFilename));
request.setAttribute("msg", "上传成功");
return "/pages/success.jsp";
}
@PostMapping("/file")//http://localhost:8088/file
public String uploadFile(@RequestBody MultipartFile file, HttpServletRequest request) throws IOException {
//获取存储的绝对路径,此处放到img目录下面
String realPath = request.getServletContext().getRealPath("upload/");
//获取文件名
String originalFilename = file.getOriginalFilename();
//文件传输
file.transferTo(Paths.get(realPath + new Date().getTime() + originalFilename));
request.setAttribute("msg", "上传成功");
return "/pages/success.jsp";
}
多个文件上传:
@PostMapping("uploadMore")
public String uploadMore(HttpServletRequest request) throws ServletException, IOException {
String realPath = request.getServletContext().getRealPath("/upload/");
File file = new File(realPath);
if (!file.exists()) file.mkdirs();
Collection<Part> parts = request.getParts();
parts.forEach(part -> {
String fileName = part.getSubmittedFileName();//获取文件上传的名字
String dir = disClose(fileName, realPath);//文件打散
try {
part.write(dir + fileName);//文件上传的位置
} catch (IOException e) {
throw new RuntimeException(e);
}
});
return "pages/success.jsp";
}
private String disClose(String fileName, String savePath) {
//获取文件名hashcode的值,得到filename在内存中的地址
int hashcode = fileName.hashCode();
int dir1 = hashcode & 0xf;
int dir2 = (hashcode & 0xf0) >> 4;
String dir = savePath + "\\" + dir1 + "\\";
File file = new File(dir);
if (!file.exists()) file.mkdirs();
System.out.println(dir);
return dir;
}