使用需要标头并提供内容的REST请求下载文件

Bas*_*der 6 javascript rest angularjs

我正在使用带有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;
    };
Run Code Online (Sandbox Code Playgroud)

在返回正文中我有文件内容(见下文).我想下载它.这怎么可能 ?请注意,我无法将文件存储为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
[.....]
Run Code Online (Sandbox Code Playgroud)

mig*_*svq 5

我想你可以使用blob,比如

var content=...the content of your request;
var mypdf = new Blob(content, {type : 'application/pdf'});
Run Code Online (Sandbox Code Playgroud)

并在另一个问题中检查"panzi"的答案使用HTML5/Javascript生成并保存文件

(数组中每个元素一个字符看起来非常漂亮.可能你不需要转换它.https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data)


Bas*_*der 2

感谢大家帮助寻找解决方案。

我无法在 javascript 和客户端应用程序中找到令人满意的解决方案。我将创建一个与 API 通信的代理类。

这将发送带有安全标头的 REST 请求,并提供文件内容作为响应。

此类将由 HTTP GET 请求调用,因此借助正确的响应标头,可以轻松管理“另存为”过程。


归档时间:

查看次数:

28713 次

最近记录:

11 年,2 月 前