所以我有一個問題,當我試圖從服務器響應保存文件。javascript保存HTTP響應文件(Web Api HttpResponseMessage)
當我嘗試從我的瀏覽器中的url下載文件時,所有的工作,但是當我試圖從clint端發送請求文件被保存,但在文件中有「[對象對象]」,如果它是PDF文件無法打開。
該請求必須包含一個額外的頭部,其中包含客戶端的密鑰ID。
這裏我的服務器代碼:
[HttpGet, IsAllowed(4,PageAction.Download)]
public HttpResponseMessage Download(string id)
{
var path = HttpContext.Current.Server.MapPath("~") + string.Format(@"Files\{0}.doc",id);
var stream = new FileStream(path, FileMode.Open);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = string.Format("{0}.doc", id);
return result;
}
在這裏,我的克林特代碼:
function get() {
var defer = $q.defer();
$http.post('http://localhost:4704/api/file/download/1', { responseType: 'arrayBuffer' }).then(
function (data, status, headers, config) {
var results = {
data: data,
headers: data.headers(),
status: data.status,
config: data.config
};
defer.resolve(results);
}, function (data, status, headers, config) {
defer.reject(data);
});
return defer.promise;
}
$scope.download = function() {
get().then(function (response) {
var octetStreamMime = 'application/octet-stream';
var fileName = "Test.doc";
var contentType = response.headers["content-type"] || octetStreamMime;
try {
var blob = new Blob([response.data], { type: contentType });
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else {
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
}
} catch (exc) {
console.log("Save Blob method failed with the following exception.");
console.log(exc);
}
}, function (error) {
});
此外,我也嘗試下面的代碼:
$http.get("http://localhost:4704/api/file/download").then(function (res) {
var anchor = angular.element('<a/>');
anchor.attr({
href: 'data:attachment/doc;charset=utf-8,',
target: '_blank',
download: 'test.doc'
})[0].click();
})
如果您嘗試下載文件。你的頭文件必須有** content-type:multipart/form-data **。如果您無法正確打開PDF文件,則表示該流受到影響。所以你需要弄清楚轉換 – Aravind