티스토리 뷰
증상
서버에서 파일을 읽어오다가 실패하면서 console에 "net::ERR_CONTENT_LENGTH_MISMATCH 200" 출력
원인
서버에서 읽어오는 파일의 크기와 Header에 설정된 파일의 Content-Length의 크기가 달라서 발생
해결
upload 할 때 파일 크기를 추출해서 DB에 저장한다.
@PostMapping("/uri")
public String upload(@RequestParam("file") MultipartFile file) {
Object obj = new Object();
obj.setFileSize((int) file.getSize()); //MultipartFile의 getSize() 메소드로 파일 크기를 추출한다.
service.insert(obj); //추출한 파일 크기를 DB에 INSERT 한다.
return "str";
}
download 할 때 DB에 저장된 크기를 읽어서 Header에 입력한다.
@GetMapping("/uri")
public void download(HttpServletResponse response) {
Object obj = service.select();
int fileLength = obj.getFileSize();
response.setHeader("Content-Length", "" + fileLength); //파일 크기를 header 정보에 set한다.
try (
FileInputStream fis = new FileInputStream(saveFileName);
OutputStream out = response.getOutputStream();
) {
int readCount = 0;
byte[] buffer = new byte[1024];
while ((readCount = fis.read(buffer)) != -1) {
out.write(buffer, 0, readCount);
}
} catch (Exception ex) {
throw new RuntimeException("file Save Error");
}
}
참고
'Framework > Spring' 카테고리의 다른 글
MessageSource 다국어 처리 (2) | 2022.06.15 |
---|---|
"Web server failed to start. Port 8080 was already in use." 에러 (0) | 2021.02.05 |
Spring session으로 로그인 기능 구현 (0) | 2021.01.26 |
트랜잭션(Transaction) (0) | 2021.01.10 |
페이징 처리 (0) | 2021.01.07 |
댓글