2016-08-13 71 views
1

我使用角度$ http从服务器下载文件。文件类型可以不同。 我应该设置请求标头为了认证。下载完成时, 文件已损坏! 这里是我的客户端代码来保存文件:

getFile: function(file) { 
    $http({ 
     method: 'GET', 
     url: 'download' + "/" + file.name, 
     headers: { 
      "X-AUTH-TOKEN": "my-token", 
      Accept: "*/*", 
     } 
    }).success(function(data) { 
     var fileBlob = new Blob([data], { 
      type: '*/*;charset=utf-8' 
     }); 
     saveAs(fileBlob, file.name); 
    }).error(function(err) { 
     console.log('err', err); 
    }); 
} 
+0

是您的损坏文件的二进制文件或文本文件? –

+0

* .txt文件都可以。但* .pdf,* .docx等已损坏 –

+0

将二进制文件另存为文本文件会导致大量字符被解释,从而破坏二进制文件。我已经删除了我的答案,因为它没有删除它,但这可能是原因。在这里进一步挖掘:http://stackoverflow.com/questions/23451726/saving-binary-data-as-file-using-javascript-from-a-browser –

回答

3

我最后加入这个CONFIGS到Ajax请求解决了这个问题:

dataType : "binary", 
    processData : false, 
    responseType : 'arraybuffer' 

和不断变化的BLOB类型

“应用/ octet-stream“

+0

任何人都可以帮我解决这个问题吗? http://stackoverflow.com/questions/42396959/downloaded-document-getting-corrupted-using-blob-method-in-angularjs – Phoenix