我正在使用带有REST API的AngularJs。我没有掌握REST API。 我可以通过发送REST请求来存储带有API的数字对象。 我也可以通过GET请求得到它。 请求需要有一些特定的标题。
我的目标是让用户下载并保存为"链接。 目前,在点击事件中我发出请求:
this.file = function (file) {
var url = config.domain + 'file/' + file;
var methods = resource(url, null, {
'get': {
method:'GET',
headers:{ 'Authorization' : user.auth,
'secret-key' : user.secretkey}
}
transformResponse : function(data, headersGetter){
return {content:data}; //transform octet stream into text, angular returns an array containing 1 character per element.
},
});
return methods;
};
在返回正文中我有文件内容(见下文)。我想下载它。这怎么可能 ?请注意,我无法将文件存储为URL。
是否有可能打开一个窗口,让其余部分使用好标题调用并保存文件?
修改
我需要解决方案才能使用50Mo文件。
我拥有的PDF文件内容示例:
%PDF-1.7
£´ÅÖçø
2 0 obj
[/ICCBased 3 0 R]
endobj
3 0 obj
<<
/Filter /FlateDecode
/Length 2596
/N 3
>>
stream
xwTSÙϽ7½PÐkhRH
½H.*1 JÀ"6DTpDQ¦2(à£C±"Q±ëDÔqpIdß¼yïÍß÷~k½ÏÝgï}ÖºüÂLX ¡XáçÅg`ðlàp³³BøF|Ølø½º ùû*Ó?Áÿ¹Y"1PçòøÙ\É8=W%·Oɶ4MÎ0JÎ"Y2Vsò,[|öe9ó2<ËsÎâeðäÜ'ã9¾`çø¹2¾&ctI@Æoä±|N6(Ü.æsSdl-c(2- ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§&\SáÏÏMçÅÌ07#â1ØYárfÏüYym²";Ø8980m-m¾(Ô]ü÷v^îDøÃöW~
°¦eµÙúmi]ëP»ýÍ`/²¾u}qº|^RÄâ,g+«ÜÜ\Kk)/èïúC_|ÏR¾Ýïåaxó8t1C^7nfz¦DÄÈÎâpùæøþuü$¾/ED˦L Lµ[ÈB@øøÃþ¤Ù¹ÚøÐX¥!@~(* {d+Ðï}ÆGùÍÑûÏþ}W¸LþÈ$cGD2¸QÎìüZ4 E@ê@èÀ¶À¸àA(q`1àD µ `'¨u 46ptcà48.Ë`ÜR0)ð
Ì@ÈRt CȲXäCP%CBH@ë R¨ªê¡fè[è(tº
C· Qhúz#0 ¦ÁZ°l³`O8ÁÉð28.·Àp|îOÃàX
?§:¢0ÂFBx$ !«¤i@Ú¤¹H§È[EE1PLÊ⢡V¡6£ªQP¨>ÔUÔ(j
õMFk¢ÍÑÎèt,:.FW Ðè³èô8ú¡c1L&³³³Ó9Æa¦±X¬:Öë
År°bl1¶
{{{;}#âtp¶8_\<N+ÄU
[.....]
答案 0 :(得分:5)
我认为你可以使用blob,比如
var content=...the content of your request;
var mypdf = new Blob(content, {type : 'application/pdf'});
并查看来自&#34; panzi&#34;的回答在另一个问题Using HTML5/Javascript to generate and save a file
(数组中每个元素一个字符看起来非常漂亮。可能你不需要转换它。https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data)
答案 1 :(得分:2)
也许你可以做这样的事情?
var a = document.createElement('a');
a.href = 'data:attachment/pdf,' + encodeURI(data);
a.target = '_blank';
a.download = 'filename.pdf';
a.click();
您必须确保data
格式正确,IIRC是base64。
答案 2 :(得分:2)
你可以使用它代替上面的代码:
var url = config.domain + 'file/' + file;
var parameters = "Authorization=" + user.auth +
"&secret-key=" + user.secretkey;
var reportParameters = url + encodeURIComponent(parameters);
window.location.assign(reportParameters);
答案 3 :(得分:2)
感谢大家帮忙找到解决方案。
我无法在javascript和客户端应用程序中找到令人满意的解决方案。 我将创建一个与API通信的代理类。
这将发送带有安全标头的REST请求,并将文件内容作为响应。
此类将由HTTP GET请求调用,因此&#39;另存为&#39;通过正确的响应标题,可以轻松管理流程。