1
我想通過使用jQuery調用WCF服務來遠程下載CSV文件。由於該文件實際上並未駐留在服務器上,因此我一直試圖將其作爲流返回。由於我使用Content-Disposition
標題,因此客戶端瀏覽器應自動開始使用給定文件名下載文件。在C#如何從WCF服務流下載文件?
我的WCF服務的方法:
[OperationContract()]
public Stream GetCsvFile(int id)
{
string s = ...;
WebOperationContext.Current.OutgoingResponse.ContentType = "text/csv";
WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=\"file1.csv\"";
return GenerateStreamFromString(s);
}
public Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
我的jQuery AJAX請求:
$.ajax({
type: "POST",
url: serviceUrl,
cache: false,
data: data,
dataType: "text",
contentType: "application/json; charset=utf-8",
success: function() {
// TODO...
}
});
這個請求成功地完成了!我可以在響應中看到正確的CSV數據。但是,它並未在瀏覽器中啓動實際的「文件下載」操作(現在在Chrome上進行測試),並且「file1.csv」未保存到客戶端磁盤。
在同一應用程序的舊版本VB.NET中,在.aspx頁面的代碼隱藏以下工作:
Response.Clear()
Response.ContentType = "text/csv"
Response.AddHeader("content-disposition", "attachment; filename="file1.csv")
Response.Write(s)
Response.End()
這將自動啓動的「file1.csv」文件下載。沒有「另存爲」對話框甚至可以顯示,該文件將立即下載。這很酷。
那麼,當我嘗試使用jQuery調用WCF服務時,它怎麼不起作用呢?
您的ajax調用將獲得文本響應。它只能用於JavaScript(它將被jQuery「解析」,不會/不能保存)。看到[這篇文章在這裏](http://stackoverflow.com/questions/365777/starting-file-download-with-javascript),看看如何從JavaScript開始下載。 – 2013-02-26 15:33:52
這已被回答http://stackoverflow.com/questions/6668776/download-file-through-an-ajax-call-php – 2013-02-26 15:37:26