Java Spring启动-下载后为空/失败的文件
我正在创建应用程序Spring Boot+REST+Vue.js。我有下载文件功能的问题。发送文件正常-所有上传的文件看起来都很好,打开时没有问题。但在我尝试下载一些文件后,我的open出现了问题。例如:Java Spring启动-下载后为空/失败的文件,java,spring,spring-boot,rest,spring-mvc,Java,Spring,Spring Boot,Rest,Spring Mvc,我正在创建应用程序Spring Boot+REST+Vue.js。我有下载文件功能的问题。发送文件正常-所有上传的文件看起来都很好,打开时没有问题。但在我尝试下载一些文件后,我的open出现了问题。例如: txt文件-我的文本没有波兰语字符(ąśćżć等) JPG文件-下载后在网络部分的浏览器图像看起来不错,但当我试图在Windows中打开时,我看到了错误 PDF文件-打开的文件只有正确的页数,但内容为空 下载后我在控制台中看到一些元数据,文本中有很多问号。 以下是我的一些方法: FileS
- txt文件-我的文本没有波兰语字符(ąśćżć等)
- JPG文件-下载后在网络部分的浏览器图像看起来不错,但当我试图在Windows中打开时,我看到了错误
- PDF文件-打开的文件只有正确的页数,但内容为空
@Override
public Resource loadAsResource(String filename) throws FileNotFoundException {
try {
Path file = load(filename);
Resource resource = new UrlResource(file.toUri());
if (resource.exists() || resource.isReadable()) {
return resource;
} else {
throw new FileNotFoundException(
"Could not read file: " + filename);
}
} catch (FileNotFoundException | MalformedURLException e) {
throw new FileNotFoundException("Could not read file: " + filename);
}
}
@GetMapping("/files/{travelFileId})
public ResponseEntity<Resource> downloadTravelFile(@PathVariable String travelFileId) {
Resource resource = fileService.getTravelFileResource(travelFileId);
if (resource != null) {
MediaType mediaType = MediaTypeFactory
.getMediaType(resource)
.orElse(MediaType.APPLICATION_OCTET_STREAM);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"");
return new ResponseEntity<>(resource, headers, HttpStatus.OK);
}
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
FileService.class
public Resource getTravelFileResource(Travel travel, String travelFileId) {
TravelFile savedTravelFile = fileRepository.findById(travelFileId).orElse(null);
try {
return storageService.loadAsResource(savedTravelFile.getFileName());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
FileController.class:
@Override
public Resource loadAsResource(String filename) throws FileNotFoundException {
try {
Path file = load(filename);
Resource resource = new UrlResource(file.toUri());
if (resource.exists() || resource.isReadable()) {
return resource;
} else {
throw new FileNotFoundException(
"Could not read file: " + filename);
}
} catch (FileNotFoundException | MalformedURLException e) {
throw new FileNotFoundException("Could not read file: " + filename);
}
}
@GetMapping("/files/{travelFileId})
public ResponseEntity<Resource> downloadTravelFile(@PathVariable String travelFileId) {
Resource resource = fileService.getTravelFileResource(travelFileId);
if (resource != null) {
MediaType mediaType = MediaTypeFactory
.getMediaType(resource)
.orElse(MediaType.APPLICATION_OCTET_STREAM);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"");
return new ResponseEntity<>(resource, headers, HttpStatus.OK);
}
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
@GetMapping(“/files/{travelFileId}”)
公共响应下载TravelFile(@PathVariable字符串travelFileId){
Resource Resource=fileService.getTravelFileResource(travelFileId);
if(资源!=null){
MediaType MediaType=MediaTypeFactory
.getMediaType(资源)
.orElse(MediaType.APPLICATION_OCTET_STREAM);
HttpHeaders=新的HttpHeaders();
headers.setContentType(mediaType);
headers.set(HttpHeaders.CONTENT\u配置,“附件;filename=\”“+resource.getFilename()+”\”“);
返回新的响应属性(资源、头、HttpStatus.OK);
}
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}
编辑: 好的,我发现了问题。它在前端,而不是后端。在axios中,我忘记了添加
响应类型:blob