Reputation: 307
I am trying to download a file from server using window.open(path,'_blank','download') but it just opens it in a new tab. How do I download the file? Yes I did check for other similar question but none of them work. Also I've tried this but it didn't work.
$scope.docView = function () {
Method.getbyId("api call",docId).then(function(response) {
}).catch(function (data) {
console.log("Unknown Error");
});
}
}
/*this.getbyId = function (path, id) {
return $http.get(appSetting.apiBaseUrl + path + "/" + id);
};
*/
[Route("api call")]
[HttpGet]
public IHttpActionResult ViewDocument (Guid? docId)
{
/*background work*/
response.Message = filePath;
var bytes=System.IO.File.ReadAllBytes(prevPath);
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ContentType = value.Format;
string Name = value.DocumentName;
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + Name);
HttpContext.Current.Response.BinaryWrite(bytes);
}
}
catch (Exception ex)
{
Utils.Write(ex);
}
return Ok(response);
}
Upvotes: 1
Views: 10926
Reputation: 649
To force the browser to download the file (instead of displaying it, in another tab or the current one) requires a special header to be sent along with the file body.
That's only possible if you can modify some things server-side.
You should send following headers :
Content-Disposition: attachment; filename"myfile.txt"
Content-Type: application/octet-stream; name="myfile.txt"
Content-Transfer-Encoding: binary
Of course, replace application/octet-stream
by the content-type of your file, if known (application/pdf
, image/jpeg
, etc.)
Upvotes: 2