文档数据流传输完成后链接无法打开

5

我认为我在 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;
    }

首先,我下载了该请求的所有文档,如果用户点击文件,我会调用下载流操作。
  $.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) {

                     }
                 });

我觉得成功后有些东西丢失了,虽然数据已经被下载下来,但是链接没有打开。可能是内容类型未设置,或者它认为这是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) {

                }

            });              
        }

HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 6429 Content-Type: application/txt Expires: -1 Accept-Ranges: bytes Server: Microsoft-IIS/8.0 Content-Disposition: attachment; filename=Bare.txt X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcYzBhYmRnZVxEb2N1bWVudHNcVmlzdWFsIFN0dWRpbyAyMDEyXFByb2plY3RzXFByb2plY3QuVHJhY2tlci5XZWIuU29sdXRpb25cUHJvamVjdC5UcmFja2VyLldlYlxhcGlcTXlJdGVtc0FwaVxHZXREYXRhRmlsZXNcMQ==?= X-Powered-By: ASP.NET Date: Thu, 30 Jul 2015 13:33:46 GMT这是头部信息中的内容,我将其更改为txt格式,但仍然没有运气。 - georges
1个回答

0

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

如果您仍然想从 Ajax 下载,我建议您参考this帖子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接