簡體   English   中英

如何從 WCF 服務流下載文件?

[英]How to download a file from a WCF service stream?

我正在嘗試通過使用 jQuery 調用 WCF 服務來遠程下載 CSV 文件。 由於該文件實際上並不駐留在服務器上,因此我一直試圖將其作為流返回。 由於我使用了Content-Disposition標頭,客戶端的瀏覽器應該自動開始下載具有給定文件名的文件。

我在 C# 中的 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 服務時它不起作用呢?

您需要在服務器端指定正確的 ContentType

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM