【发布时间】:2014-07-20 00:22:58
【问题描述】:
我正在使用带有 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
[.....]
【问题讨论】:
-
我不明白为什么?为什么需要将其作为文本发回而不是添加附件标题?您的客户是否编辑文件? (我假设您在浏览器中运行了 SPA 客户端。)如果您想在浏览器中显示 PDF,您可以使用数据 URL 流式传输 PDF。 stackoverflow.com/questions/12848616/…
-
stackoverflow.com/questions/10473932/… 这是您可以从浏览器强制下载的方法。如果您从那里编辑二进制文件。但是,如果将
/files/xxx?aspect=attachment存储在服务器上,则添加/files/xxx?aspect=attachment作为强制下载的表示会好得多。 -
@inf3rno 我没有精确,但问题是我不能使用 data-url,因为这不是文件的存储方式。
-
我实际上返回了一些标头,但因为它是一个通过角度进行的休息调用,浏览器不会直接收到响应。
-
问题是我需要在 REST 请求中提供特定的标头,正如我在问题中所说的那样。使用简单的 HTTP 请求是不可能做到这一点的......
标签: javascript angularjs rest