我使用angular 6从rest api下载文件时遇到问题
后端方法
@RequestMapping(value = "/print/{id}")
public ResponseEntity<byte[]> generateReport(@PathVariable("id") long id_project){
Map<String, Object> mapper = new HashMap<String, Object>();
byte[] content = exportService.export(mapper, ReportUtils.testReport, ReportUtils.FileFormat.PDF.toString());
return new ResponseEntity<>(content, Utils.getPDFHeaders("Situation_test.pdf"), HttpStatus.OK);
}
Mathod getHeader
public static HttpHeaders getPDFHeaders(String fileName) {
HttpHeaders head = new HttpHeaders();
head.setContentType(MediaType.parseMediaType("application/pdf"));
head.add("content-disposition", "attachment; filename=" + fileName);
head.setContentDispositionFormData(fileName, fileName);
head.setCacheControl("must-revalidate, post-check=0, pre-check=0");
return head;
}
我的角度服务
download(url: string): any {
let headers = new HttpHeaders();
headers = headers.append('Authorization', 'Bearer ' + this.getToken());
this.http.get(this.API_URL + url, {headers: headers}).subscribe((res) => {
const file = new Blob([res], {
type: 'application/pdf',
});
const a = document.createElement('a');
a.href = this.API_URL + (<any>res)._body;
a.target = '_blank';
document.body.appendChild(a);
a.click();
return res;
}, error => {
let alert: any = {
title: 'Notify Title',
body: 'Notify Body',
};
alert.body = error.error.message || JSON.stringify(error.error);
alert.title = error.error.error;
alert = this.alertService.handleError(error);
alert.position = 'rightTop';
console.log(error);
this.alertService.notifyError(alert);
return error;
});
}
我已经使用PostMan尝试了我的API,它的单词完美,但是在Angular中,它给了我这个错误
HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:8080/api/projects/print/1", ok: false, …}
error: {error: SyntaxError: Unexpected token % in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttp…, text: "%PDF-1.4↵%����↵3 0 obj↵<</Filter/FlateDecode/Lengt…25f1>]/Root 8 0 R/Size 10>>↵startxref↵1049↵%%EOF↵"}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message: "Http failure during parsing for http://localhost:8080/api/projects/print/1"
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "http://localhost:8080/api/projects/print/1"
尝试将内容类型添加到您的请求标头中。您可以尝试使用以下示例:
let headers = new Headers({'Content-Type': 'application/pdf', 'Accept': 'application/pdf'});
嗨,可以通过传递列表作为参数从服务器下载文件吗 用RestyGWT和Jersey 1.7? 在服务器端,我有以下web服务 当我在浏览器中键入localhost:8080/Url/download时,它可以工作,但我如何使用Resty Gwt或通过窗口下载文件呢。open()? 我想使用POST not GET,这样我可以传递一个可序列化对象的列表,例如:列表文件。 我尝试在客户端使用RestyG
问题内容: 我正在尝试使用asyncTask下载文件,但无法正常工作,没有错误消息或什么都没有,只是不下载文件…我尝试了所有操作,但似乎并没有输入…任何人都知道可以是问题吗?我在手机上测试过,网址也可以。 问题答案: 我只运行了您的代码,它对我来说很好用。该图像已下载到sdcard。 请注意,请确保在AndroidManifest.xml中设置了以下权限: 这是我得到的日志(请注意,我添加了):
问题内容: 我编写了一些代码来下载我所做的网络广播的一集。它获取剧集的URL,并获取保存它的位置。但是,它最多只能下载16MB,然后自动取消。我不完全确定要增加此值需要更改什么值。是否可以,有人可以指出正确的方向吗?谢谢! 下载代码: 问题答案: 快速查看transferFrom的文档: 好。 计数的值1 << 24(来自原始问题)等于16M 我想这就是您的问题的答案:-)
问题内容: 我需要提供下载文件的链接,任何用户都必须隐藏该链接并且可以访问该链接,这是我的代码,没有任何错误,但是我什至无法打开下载对话框: 模板 脚本文件 问题答案: 首先,您不能“隐藏/不公开”基于Web的技术(HTML / CSS / JavaScript)应用程序中的链接。下载是由客户端处理的,因此Download / Link-URL必须是公共的。您可以尝试使用后端执行的编程语言(例如“
我想做的是用httpclient下载一个文件。目前我的代码如下。 我的下载URL如下所示:http://example.com/file/afz938f348dfa3 正如你可以看到没有扩展名的文件(至少在网址)然而,当我去一个正常的浏览器网址,它下载文件asdasdaasda.txt或asdasdasdsd.pdf(名称是不同的url和extenstion并不总是相同的,取决于我试图下载什么)。
我有一个CSV文件的URL,我可以在浏览器中下载并打开该文件,而不会出现问题。 我正在尝试使用电源外壳下载此文件,但没有成功。我尝试使用,和使用web命令对象,但没有运气。