gpt4 book ai didi

angularjs - 下载的文档在 angularJS 中使用 Blob 方法损坏

转载 作者:行者123 更新时间:2023-12-04 02:07:05 25 4
gpt4 key购买 nike

在我将 Angular 升级到最新版本之前,下载文件在我的应用程序中工作正常。即使现在,该文件仍在下载,但问题是它已损坏。上传文件工作正常,如果我们检查文件服务器,文件将完好无损。但是下载后,我得到了损坏的文件。

HTML :

<td data-title="''">

<a tooltip="Download CV" ng-hide="!talent.resumePath" tooltip-trigger tooltip-animation="false" tooltip-placement="bottom" ng-click="downloadResume(talent.id)" data-placement="top" data-toggle="tooltip" data-original-title="resume">
<img src="../../img/DownloadIcon.png" /></a>
</td>

Controller :

downloadResume: function(employeeId) {
return apiServices.getFileFromTalentPool('/talentpool/resume?id=' + employeeId)
},

其中,getFileFromTalentPool 是:https://hastebin.com/yivaterozi.js

端点:

public FileResult GetResume(int id) {
var result = _services.GetResume(id);
if (result != null) {
HttpContext.Response.ContentType = result.ContentType;
HttpContext.Response.Headers["Access-Control-Expose-Headers"] = "FileName";
HttpContext.Response.Headers["FileName"] = result.FileDownloadName;
}
return result;
}

通常我下载 Doc 文件。我尝试使用记事本文件来查看它是否相同。奇怪的是,我注意到我能够打开记事本文件,但它的内容被操纵为类似于 [object Object] 的内容。但对于 Doc 文件,它只显示:

enter image description here

我该如何解决这个问题?

最佳答案

它看起来像 https://hastebin.com/yivaterozi.js 处的代码从使用已弃用的 $http.success() 方法更新为当前的 $http.then()。 Promise 的成功回调函数(在 then 方法中)只接收一个对象参数:https://docs.angularjs.org/api/ng/service/ $http。已弃用的“成功”方法获得了更多参数(数据、状态、 header )并且 data 已包含原始数据。使用 then() 时,数据位于响应的 data 属性下,因此请尝试将您的 $http 调用更改为:

$http({
method: 'GET',
cache: false,
url: fileurl,
responseType:'arraybuffer',
headers: {
'Authorization': "Bearer " + $rootScope.userInfo.access_token,
'Access-Control-Allow-Origin': '*'
}
}).then(function (data) {
var octetStreamMime = 'application/octet-stream';
var success = false;

// Get the headers
var headers = data.headers();
...
...

请注意,标题是从数据对象中正确获取的,而不是从第三个参数中获取的(只需添加 var,因为我们删除了空参数)。现在,在每个使用data 的地方,将其更改为data.data,例如:

// Try using msSaveBlob if supported 
var blob = new Blob([data.data], { type: contentType });

或者只是将参数 data 更改为 response 并添加 var data = response.data; 并将 headers getter 修改为 headers = response.headers();:

$http({
method: 'GET',
cache: false,
url: fileurl,
responseType:'arraybuffer',
headers: {
'Authorization': "Bearer " + $rootScope.userInfo.access_token,
'Access-Control-Allow-Origin': '*'
}
}).then(function (response) {
var octetStreamMime = 'application/octet-stream';
var success = false;

// Get data
var data = response.data;

// Get the headers
var headers = response.headers();
...
...

关于angularjs - 下载的文档在 angularJS 中使用 Blob 方法损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42396959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com