在流式传输文档数据后链接未打开

geo*_*ges 5 javascript c# jquery asp.net-web-api

我想我在JavaScript方面缺少一些代码.我正在为每个请求下载文档.当用户点击链接时,我会获取文档数据并将其流式传输.我在Fiddler上看到数据正在关闭,但.txt文档链接没有打开.

[HttpGet]
    public HttpResponseMessage GetDataFiles(Int64 Id)
    {
        var results = context.PT_MVC_RequestFile.Where(x => x.RowId == Id).FirstOrDefault();
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

        try
        {
            if (results != null)
            {
                response.Headers.AcceptRanges.Add("bytes");
                response.StatusCode = HttpStatusCode.OK;
                response.Content = new ByteArrayContent(results.Data);
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
                response.Content.Headers.ContentDisposition.FileName = results.FileName;
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Content.Headers.ContentLength = results.Data.Length;
            }
        }
        catch (EntityException ex)
        {
            throw new EntityException("GetFiles Failed" + ex.Message);
        }

        return response;
    }
Run Code Online (Sandbox Code Playgroud)

首先,我下载了该请求的所有文档,如果用户点击该文件,我会调用下载流操作.

  $.ajax({
                     url: url,
                     type: 'GET',
                   //  data: JSON.stringify(model, null),
                     contentType: "application/json",
                     success: function (data) {

                         if (data != "") {
                             $("#fileLength").val(data.length);
                            // alert(data.length);
                            $.each(data, function (i, item) {
                                 var newDiv = $(document.createElement('div')).attr("id", 'file' + i);
                                 newDiv.html("<input id=\"cb" + i + "\" type=\"checkbox\"> &nbsp; <a href=\"#\" onclick=\"GetData('" + item.RowId + "','" + item.mineType + "')\"   >" + item.FileName + "</a>");
                                 newDiv.appendTo("#fileRows");
                             });
                         } else {

                        }
                     },
                     error: function (xhr, ajaxOptions, thrownError) {

                     }
                 });
Run Code Online (Sandbox Code Playgroud)

我想我在成功后会遗漏一些东西.它以某种方式下载数据,但链接无法打开.可能是内容类型未设置,还是认为它是JSON数据?请帮助一些想法.

链接在这里:

function GetData(rowId,mineType) {
           // alert(mineType);
            var url = "api/MyItemsApi/GetDataFiles/" + rowId;

            $.ajax({
                url: url,
                type: 'GET',
                //data: JSON.stringify(model, null),
                contentType: "application/json",
                success: function (data) {

                },
                error: function (xhr, ajaxOptions, thrownError) {

                }

            });              
        }
Run Code Online (Sandbox Code Playgroud)

小智 0

您无法通过 Ajax 请求轻松下载文件。我建议将数据从表单发布到空白页面,而不是 Ajax(如果需要,您可以填充该表单并通过 jQuery 发布)。如果您有兴趣,我可以指导您完成它,请告诉我。

如果你还想从Ajax下载,我建议你参考这篇文章。