簡體   English   中英

將zip文件返回給angularjs進行下載

[英]Returning a zip file to angularjs for download

我有以下angularjs代碼:

$scope.search = function() {
    creatorService.search($scope.model).then(function(data) {
        saveAs(new Blob([data], { type: "application/octet-stream'" }), 'testfile.zip');
    });
};

(也使用fileSaver.js

然后在我的webapi2端使用以下方法:

public HttpResponseMessage Post(Object parameters)
    {
        var streamContent = new PushStreamContent((outputStream, httpContext, transportContent) =>
           {
               try
               {
                   using (var zip = new ZipFile())
                   {
                       zip.AddEntry("test.txt", "test data");
                       zip.Save(outputStream);
                   }
               }
               finally
               {
                   outputStream.Close();
               }
           });
        streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
        streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = "test.zip"
        };

        var response = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = streamContent
        };

        return response;
    }

我從這篇文章中得到了很多,它使用了ZipFile。

一切似乎都工作得非常完美,除了下載zip文件時無法打開它-這是無效的。 它的大小合適,而且內容似乎合適,但是我無法打開它。

我可以驗證angularjs代碼是否正確命中了Post() ,是否正在傳遞參數(如果有),並且Post()正在執行並返回而沒有錯誤。 然后,由fileSaver東西正確處理返回的內容,然后我可以保存生成的zip文件。

我不是以正確的方式進行操作,還是做錯了什么?

我正在重新發布我的評論(因為這是解決方案):

如果您直接致電(不使用任何JavaScript代碼)服務,您會獲得有效的zip文件嗎? 我懷疑ajax調用會損壞您的文件。 您的js代碼中的數據類型是什么?

如果這是字符串,則您的瀏覽器可能正在應用utf8轉換(損壞了文件)。 在這種情況下,您可以在執行ajax請求時要求ArrayBuffer,即xhr.responseType = "arraybuffer";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM