【问题标题】:Download a file via web service and jquery?通过 Web 服务和 jquery 下载文件?
【发布时间】:2013-09-20 15:24:14
【问题描述】:

我正在尝试在 asp.net 2.0 中创建一个 Web 服务来下载文件(打开或保存文件的弹出窗口),方式如下:

$.ajax({
        type: "POST",
        url: "webservice.asmx/download",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        success: function (res) {
            console.log("donwloaded");
        }
    });

在“webservice.asmx”中

[WebMethod()]
public byte[] DownloadFile(string FName)
{
    System.IO.FileStream fs1 = null;
    fs1 = System.IO.File.Open(FName, FileMode.Open, FileAccess.Read);
    byte[] b1 = new byte[fs1.Length];
    fs1.Read(b1, 0, (int)fs1.Length);
    fs1.Close();
    return b1;
}

[WebMethod]
public void download()
{
    string filename = "test.txt";
    string path = "C:\\test.txt";

    byte[] ls1 = DownloadFile(path);
    HttpResponse response = Context.Response;

    response.Clear();
    response.BufferOutput = true;
    response.ContentType = "application/octet-stream";
    response.ContentEncoding = Encoding.UTF8;
    response.AppendHeader("content-disposition", "attachment; filename=" + filename);

    response.BinaryWrite(ls1);

    response.Flush();
    response.Close();
}

通过这种方式我可以看到文件的内容(我无法通过弹出窗口下载文件)。

我哪里错了?可以这样做吗?

提前致谢

【问题讨论】:

  • 您必须打开一个新窗口并在该新窗口中调用此 ajax 部分。
  • 我认为文件的内容类型不同,以便显示为可下载的。
  • 对不起,我不明白你的意思。实际上ajax调用是在aspx页面上的点击事件中......(对于“弹出窗口”我是指浏览器的默认确认窗口)
  • 哦,好吧..我认为popu部分对你有用。对于上面的部分,我告诉你打开一个粘贴了上面 JS 的空白 URL,但你可以忽略它。挺有意思的,没试过AJAX请求文件下载,不知道AJAX响应能不能有不同的contenttype
  • 我认为这个问题的答案可能会有所帮助stackoverflow.com/questions/16670209/…

标签: c# jquery asp.net web-services download


【解决方案1】:

这不是一个好方法,要通过弹出窗口下载文件,只需打开一个新弹出窗口并将该窗口的 url 指向您的文件或 web 服务 url。

window.open("fileurl"  )

【讨论】:

    【解决方案2】:

    一个很好的方法是简单地将浏览器重定向到“webservice.asmx/download”而不是通过ajax调用它。即

    window.location.href = 'webservice.asmx/download';
    

    当浏览器检测到您返回八位字节流时​​,它会要求下载文件,但不会清除/擦除您所在的页面。

    【讨论】:

    • 但是我可以通过这种方式将 json 对象发送到服务器吗?
    • 你可以序列化 json 对象然后 urlencode 它,但这是错误的方法,不推荐
    • 不,我没有注意到您希望通过 POST 开始下载...我认为这不是一个好主意 - 没有下载恢复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2019-01-07
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多