Javascript在浏览器中下载文档。 Web API

时间:2016-08-25 14:57:45

标签: javascript json ajax asp.net-web-api

我正在使用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) {

1 个答案:

答案 0 :(得分:1)

出于安全原因,不允许下载Ajax文件(否则任何网站都可以在后台将任何文件下载到用户计算机)

无需使用ajax调用,如果href指向返回文档的URL(标题是文档),则可以使用普通链接触发下载而无需重新加载页面就像你的API一样。所以你可以这样做:

 <a href="/Api/DocumentApi/DownloadDocument?DocumentID=10">Download</a>

将DocumentID设置为您要下载的文档的ID。当用户单击链接时,页面将不会更改/刷新