java - 从 Rest API Java 下载 ODS/XLS

标签 java angularjs rest file ods

我正在尝试下载 ODS 文件(Open Office 的 Calc 文件)。 我使用 Java 作为后端,使用 AngularJS 作为前端。 这是我接收和下载文件的前端代码:

vm.downloadModel = () => {
  DataFactory.GET(`${URL.CTM_ODS()}/rotas/modelo`, { headers: { 'Content-Type': 'application/octet-stream' } }).then(response => {
    let file = new Blob([response], { type: 'application/vnd.oasis.opendocument.spreadsheet' });
    let url = window.URL || window.webkitURL;
    let downloadLink = angular.element('<a></a>');
    downloadLink.attr('href', url.createObjectURL(file));
    downloadLink.attr('target', '_self');
    downloadLink.attr('download', 'Model_Routes_OD.ods');
    downloadLink[0].click();
  });
}

这是我后端的端点:

@GetMapping(value = "/modelo")
@ResponseBody
public ResponseEntity<ByteArrayResource> getModelo() throws IOException {
    String path = "C:\\Model_Routes_OD.ods";
    File file = new File(path);
    Path pathObj = Paths.get(file.getAbsolutePath());
    ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(pathObj));
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName());
    headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
    headers.add(HttpHeaders.CONTENT_LENGTH, String.valueOf(Files.readAllBytes(pathObj).length));
    headers.add(HttpHeaders.TRANSFER_ENCODING, "binary");

    return new ResponseEntity<>(resource, headers, HttpStatus.OK);
}

下载的文件已损坏!我的文件有 13Kb,下载时显示 21Kb,当我尝试打开时,他说该文件“已损坏”,他可以尝试修复它,但没有成功。

最佳答案

我尝试了你的代码,API 工作正常。 您不需要在前端显式处理文件,只需下载它即可。

上述场景的示例代码:

var app = angular.module('demo', []);

app.controller('Download', function($scope, $http) {
    $scope.download = function(){
        var url = "http://localhost:8080/modelo"
            window.open(url, "_self");
    }
});

我能够完美下载文件,这里是此 example 的完整代码

关于java - 从 Rest API Java 下载 ODS/XLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61510799/

相关文章:

java Runnable - 线程 "main"java.lang.NoClassDefFoundError 中出现异常

javascript - Angular + RequireJs : Resolve templateUrls of directives

java - 使用reSTLet上传文件

java - 为什么swagger在客户端SDK中为GET请求生成void方法?

java - 需要有关应用程序架构的建议

java - Dropwizard热部署

javascript - Cookie 不是使用 ngCookies 存储的

javascript - TypeError : customerFactory. getOrders 不是函数

java - 从 Android Java 和 PHP REST API 解析 JSON 的异常

java - ArrayList<BigInteger> 排序算法 Java