之前有人說,「複製」,我只是想確保,即人們知道,我已經審查了這些問題:客戶端下載
1)使用的角度和PHP,不肯定這裏發生了什麼(我不知道PHP):Download zip file and trigger "save file" dialog from angular method
2)不能得到這個答案,做任何事情:how to download a zip file using angular
3)此人已經可以下載,這是過去的時候,我正試圖弄清楚: Download external zip file from angular triggered on a button action
4)沒有回答這一個: download .zip file from server in nodejs
5)我不知道用什麼語言這甚至是: https://stackoverflow.com/questions/35596764/zip-file-download-using-angularjs-directive
鑑於這些問題,如果這仍然是一個重複的,我道歉。這是另一個版本的問題。
我的角度1.5.X客戶端給我一個標題列表,其中每個標題都有一個關聯的文件。我的節點4.X/Express 4.X服務器獲取該列表,獲取文件位置,使用npm中的express-zip創建一個zip文件,然後將該文件傳回給響應。然後我希望我的客戶端啓動瀏覽器的「下載文件」選項。
這裏是我的客戶端代碼(角1.5.X):
function bulkdownload(titles){
titles = titles || [];
if (titles.length > 0) {
$http.get('/query/bulkdownload',{
params:{titles:titles},
responseType:'arraybuffer'
})
.then(successCb,errorCb)
.catch(exceptionCb);
}
function successCb(response){
// This is the part I believe I cannot get to work, my code snippet is below
};
function errorCb(error){
alert('Error: ' + JSON.stringify(error));
};
function exceptionCb(ex){
alert('Exception: ' + JSON.stringify(ex));
};
};
節點(4.X)與快遞拉鍊,https://www.npmjs.com/package/express-zip代碼:
router.get('/bulkdownload',function(req,resp){
var titles = req.query.titles || [];
if (titles.length > 0){
utils.getFileLocations(titles).
then(function(files){
let filename = 'zipfile.zip';
// .zip sets Content-Type and Content-disposition
resp.zip(files,filename,console.log);
},
_errorCb)
}
});
這裏是我的successCb在我客戶端代碼(Angular 1.5.X):
function successCb(response){
var URL = $window.URL || $window.webkitURL || $window.mozURL || $window.msURL;
if (URL) {
var blob = new Blob([response.data],{type:'application/zip'});
var url = URL.createObjectURL(blob);
$window.open(url);
}
};
「blob」部分s eems工作正常。在IE的調試器中檢查它,它看起來像一個八位字節信息的文件流。現在,我相信我需要將該blob放入一些HTML5指令中,從瀏覽器啓動「另存文件」。也許?也許不會?
由於90%以上的用戶使用IE11,我測試了PhantomJS(Karma)和IE中的所有角度。當我運行的代碼,我得到的是舊「訪問被拒絕」的一個警告窗口錯誤:
Exception: {"description":"Access is denied...<stack trace>}
建議,澄清,解答等,歡迎!
所以會發生什麼?它在哪一點失敗?你偶然有一個彈出式窗口攔截器嗎? – idbehold
是否有錯誤?如果手動輸入url http:// localhost/query/bulkdownload?titles = 123',你可以下載文件嗎? –
哦拍!對不起,讓我更新一下。 – westandy