2015-05-11 97 views
0

拉出我的頭髮。通過AngularJS,WebAPI發送文件到瀏覽器,不會觸發下載?

我必須通過角GET請求:在WEB API

x.DeliverFile = function(fileId) { 
    $http({ 
    method: "GET", 
    url: myBase + "Services/DeliverFile?FileID=" + fileId, 
    headers: myHeaders 
    }).success(function(data, status, headers, config) { 
    console.log(data); 
    }); 
}; 

和:

If fileinfo.Exists Then 
    Dim result As New HttpResponseMessage(HttpStatusCode.OK) 
    With result 
    .Content = New StreamContent(New FileStream(fileinfo.FullName, FileMode.Open, FileAccess.Read)) 
    .Content.Headers.ContentDisposition = New Headers.ContentDispositionHeaderValue("attachment") 
    .Content.Headers.ContentDisposition.FileName = fileinfo.Name 
    .Content.Headers.ContentType = New Headers.MediaTypeHeaderValue("application/octet-stream") 

    End With 
    Return result 

    Else 
    Return Request.CreateResponse(HttpStatusCode.NotFound) 
End If 

我和HttpHandlers的做到了這一點很多次,但與網頁API顯然缺少的東西。

我能夠通過console.log(data)查看字節;

我無法弄清楚如何讓瀏覽器觸發下載。

我在這裏看到這篇文章:Download file from an ASP.NET Web API method using AngularJS

我無法接受「接受的答案」,因爲必須有觸發一個跨瀏覽器兼容的方式下載的方式。

回答

0

你需要使用像FileSaver.js,然後你可以這樣做:

x.DeliverFile = function(fileId) { 
    $http({ 
    method: "GET", 
    url: myBase + "Services/DeliverFile?FileID=" + fileId, 
    headers: myHeaders 
    }).success(function(data, status, headers, config) { 
    var blob = new Blob(data, {type: "text/plain;charset=utf-8"}); 
    saveAs(blob, "fileName.txt"); 
    }); 
}; 
+0

貌似不支持IE9。我堅持不得不在這個項目上支持它。或者至少我不認爲它是。詳細閱讀。謝謝你的幫助。 – user1447679