我正在使用Web API使用以下内容获取文档:
[Route("Api/DocumentApi/DownloadDocument")]
[HttpGet]
public IHttpActionResult DownloadDocument(int documentID)
{
Document documentToDownload = new Document();
using (TrustInvestmentSwitchEntities db = new TrustInvestmentSwitchEntities())
{
DocumentRepository repo = new DocumentRepository();
documentToDownload = repo.GetSingle(db, x => x.ID == documentID);
}
var stream = new MemoryStream();
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(stream.GetBuffer())
};
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = documentToDownload.FileName
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
var response = ResponseMessage(result);
return response;
}
这看起来像是在检索文档。但是,我希望文档立即下载或显示弹出窗口供用户选择保存文件的位置,但这不会发生。立即下载是首选。
这是我的Javascript GET,我认为是问题:
DocumentToDownload = $(that).closest('.document-item').data('documentid');
var url = '/Api/DocumentApi/DownloadDocument';
var data = {
DocumentID: DocumentToDownload
};
$.ajax({
type: "GET",
url: url,
contentType: "application/json",
data: data,
dataType: "json",
success: function (json, status) {
if (status != "success") {
log("Error loading data");
return;
}
log("Data loaded!");
},
error: function (result, status, err) {
log("Error loading data");
return;
}
});
我不确定要放什么:
success: function (json, status) {
答案 0 :(得分:1)
出于安全原因,不允许下载Ajax文件(否则任何网站都可以在后台将任何文件下载到用户计算机)
无需使用ajax调用,如果href
指向返回文档的URL(标题是文档),则可以使用普通链接触发下载而无需重新加载页面就像你的API一样。所以你可以这样做:
<a href="/Api/DocumentApi/DownloadDocument?DocumentID=10">Download</a>
将DocumentID设置为您要下载的文档的ID。当用户单击链接时,页面将不会更改/刷新