【发布时间】: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