首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从WCF服务流下载文件?

如何从WCF服务流下载文件?
EN

Stack Overflow用户
提问于 2013-02-26 23:30:53
回答 1查看 10K关注 0票数 3

我正在尝试通过使用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服务时,它为什么不起作用呢?

EN

回答 1

Stack Overflow用户

发布于 2013-08-21 15:11:44

您需要在服务器端指定适当的ContentType

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15092984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档