通过Web服务和jquery下载文件?

时间:2013-09-20 15:24:14

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

我正在尝试在 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();
}

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

哪里错了?有可能这样做吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

这不是一个好方法,通过弹出窗口进行文件下载,只需打开一个新的弹出窗口并使该窗口的URL指向您的文件或webservice URL。

window.open("fileurl"  )

答案 1 :(得分:0)

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

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

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