Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动-下载后为空/失败的文件_Java_Spring_Spring Boot_Rest_Spring Mvc - Fatal编程技术网

Java Spring启动-下载后为空/失败的文件

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

我正在创建应用程序Spring Boot+REST+Vue.js。我有下载文件功能的问题。发送文件正常-所有上传的文件看起来都很好,打开时没有问题。但在我尝试下载一些文件后,我的open出现了问题。例如:

  • txt文件-我的文本没有波兰语字符(ąśćżć等)
  • JPG文件-下载后在网络部分的浏览器图像看起来不错,但当我试图在Windows中打开时,我看到了错误
  • PDF文件-打开的文件只有正确的页数,但内容为空
下载后我在控制台中看到一些元数据,文本中有很多问号。 以下是我的一些方法:

FileStorageService.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);
}
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