2017-02-22 5 views
2

Angularを最新バージョンにアップグレードするまで、アプリケーションで正常に動作していたファイルをダウンロードしています。今でもファイルはダウンロードされていますが、問題は破損しているということです。アップロードファイルは正常に動作しており、ファイルサーバーをチェックインするとファイルは元の状態になります。しかし、ダウンロード時に、私は破損したファイルを取得しています。angularJSのBlobメソッドを使用して、ダウンロードされたドキュメントが破損しました

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> 

コントローラー:

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; 
} 

IダウDocファイルをnloadします。私はそれが同じかどうかを確認するためにメモ帳ファイルで試しました。不思議なことに、私はメモ帳ファイルを開くことができることに気付きましたが、その内容は[object Object]のように操作されています。しかし、Docファイルの場合、表示されるのはhttp://oi68.tinypic.com/2i11m9y.jpg

これを修正するにはどうすればよいですか?

答えて

3

https://hastebin.com/yivaterozi.jsのコードは、廃止予定の$http.success()メソッドを現在の$http.then()に更新したようです。プロミスの成功コールバック関数(thenメソッド内)は、1つのオブジェクト引数:https://docs.angularjs.org/api/ng/service/ $ httpを受け取ります。廃止された「成功」メソッドには、より多くの引数(データ、ステータス、ヘッダー)があり、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、空の引数を削除したためです)。 ANFヘッダがheaders = response.headers();にゲッター変更

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

か、単にデータ応答に引数を変更し、var data = response.data;を追加します。 は今、あなたはデータを使用し、それぞれの場所で、同じように、data.dataに変更します:

$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(); 
    ... 
    ... 
+0

ありがとうございます。それは魅力のように働いた! :) – Phoenix

関連する問題