当前位置: 首页 > 知识库问答 >
问题:

Spring引导Angular2文件下载不起作用

殷宾白
2023-03-14

我遇到了一个问题,从带有angular2的Spring boot加载文件。

这是我在spring boot的代码,它来自:使用spring MVC返回生成的pdf。我可以用postman直接下载文件,但不能用angular2...

@RequestMapping(value="/file/{id}", method=RequestMethod.GET)
public ResponseEntity<?> getFile(@PathVariable("id") long id) {
    UploadFile uFile = uploadFileService.getUploadFileById(id);


    byte[] contents = uFile.getContent();

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.parseMediaType("application/pdf"));
    headers.setContentDispositionFormData(uFile.getName(), uFile.getName());
    headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");

    return new ResponseEntity<byte[]>(contents, headers, HttpStatus.OK);
}

Angular2服务

downloadFile( id: number ){
    let headers = new Headers({'Content-Type': 'application/pdf', 'Accept': 'application/pdf'});
    headers.append('Authorization',this.auth.token);
    let options = new RequestOptions( { headers: headers, responseType: ResponseContentType.Blob});

    return this.http.get(this.editUrl + id, options)
    .map(res => {return new Blob([res.blob()],{ type: 'application/pdf' })});
}

和下载按钮

downloadFile(uFile: UploadFile){
    this.uploadFileService.downloadFile(uFile.id)
        .subscribe(
                data => window.open(URL.createObjectURL(data)),
            );
    return false;
}

当我点击下载按钮chrome打开新标签并立即关闭它不显示任何文件。以下是Postman的一些响应标题。

Access-Control-Allow-Headers →Content-Type, x-requested-with, Authorization, responseType
Access-Control-Allow-Methods →POST, PUT, GET, PATCH, OPTIONS, DELETE
Access-Control-Allow-Origin →http://localhost:4200
Access-Control-Max-Age →3600
Cache-Control →must-revalidate, post-check=0, pre-check=0
Content-Disposition →form-data; name="reference.pdf"; filename="reference.pdf"
Content-Length →31576
Content-Type →application/pdf
Date →Mon, 27 Mar 2017 08:39:24 GMT
X-Content-Type-Options →nosniff
X-Frame-Options →DENY
X-XSS-Protection →1; mode=block

共有1个答案

蒋泰
2023-03-14

Spring Boot解决方案基于使用Spring MVC返回生成的pdf,PDF Blob上的Angular2未显示内容,Angular 2。有问题的代码完全正常工作。使用pdf文件自动关闭选项卡的原因是chrome中的Adblock插件。

 类似资料:
  • 我需要编写一个使用Spring Boot控制器和多部分文件的上传角度模块。但是当我上传文件时,我有一个错误 我尝试了很多更改,但每次都出现这个错误。这是我的angular file sender数据服务 这是我的控制器 它无法使用或不使用多部分解析器。你能帮我上传这个文件吗?

  • 目前,我正在使用此代码来下载文件: 问题是当我尝试下载大文件时,代码会引发。 有没有其他方法可以避免这个错误来获取我的大文件? 编辑:另一个问题。 我正在考虑应用而不是: 和有什么区别?那个类会实现我的目标吗?

  • 如何与剧作家一起下载文件? 我知道这个问题,如何与剧作家一起下载?但该示例代码不起作用。使用最新发布的剧作家,浏览器实例上没有“pageTarget”功能:

  • 问题内容: 我正在使用以下脚本来启动文件下载: 当我直接打开页面时,它工作正常,但事实是,我需要从另一个页面通过Ajax调用此脚本。当我这样做时,下载就不会开始。脚本的其余部分执行了预期的工作。 我以为问题不在于无法以这种方式使用标头函数,但是肯定有一种方法可以使这项工作正常进行吗? 如果有任何帮助,这是Ajax函数: 形式如下: 问题答案: 您不能使用AJAX下载文件。这没有道理。您可以发送AJ

  • 问题内容: 我正在使用以下脚本来启动文件下载: 当我直接打开页面时,它工作正常,但事实是,我需要从另一个页面通过Ajax调用此脚本。当我这样做时,下载就不会开始。脚本的其余部分执行了预期的工作。 我认为问题不是这种方式可以使用头函数,但是肯定有一种方法可以使这项工作正常进行吗? 如果有帮助,这是Ajax函数: 形式如下: 问题答案: 您不能使用AJAX下载文件。这没有道理。您可以发送AJAX请求并

  • 问题内容: 我正在使用ajax加载来获取页面上的某些内容。我正在使用引导程序3和引导程序切换。加载内容时,bootstrap 3内容运行良好(您可以清楚地看到面板panel- primary)。但是引导加载内容不会被加载(您只能看到一些复选框)。annyone知道如何使它正常工作吗?还是我应该注意其他一些拨动开关?如果是哪一个? 编辑:我还没有测试出事件绑定,因为我无法使引导切换CSS在Ajax加