gpt4 book ai didi

c# - 如何使用 ServiceStack 客户端使用文件

转载 作者:可可西里 更新时间:2023-11-01 07:51:32 24 4
gpt4 key购买 nike

我正在尝试使用 ServiceStack以 RESTful 方式将文件返回给 ServiceStack 客户端。

我已经阅读了关于 SO(herehere)的其他问题,这些问题建议使用 HttpResult 和 FileInfo 对象或 MemoryStream 以允许将 ContentType header 更改为相关文件类型。

当我通过浏览器调用服务时,这对我有用,正确的文件会自动开始下载。我如何使用 ServiceStack 客户端之一使用文件?

我正在使用 Request DTO 并尝试使用类似的东西返回

return new HttpResult(new FileInfo("file.xml"), asAttachment:true) {
ContentType = "text/xml"
};

例如,我将如何使用 JsonServiceClient 使用它?

最佳答案

我有一个类似的要求,也要求我跟踪流式文件下载的进度。我大致是这样做的:

服务器端:

服务:

public object Get(FooRequest request)
{
var stream = ...//some Stream
return new StreamedResult(stream);
}

StreamedResult 类:

public class StreamedResult : IHasOptions, IStreamWriter
{
public IDictionary<string, string> Options { get; private set; }
Stream _responseStream;

public StreamedResult(Stream responseStream)
{
_responseStream = responseStream;

long length = -1;
try { length = _responseStream.Length; }
catch (NotSupportedException) { }

Options = new Dictionary<string, string>
{
{"Content-Type", "application/octet-stream"},
{ "X-Api-Length", length.ToString() }
};
}

public void WriteTo(Stream responseStream)
{
if (_responseStream == null)
return;

using (_responseStream)
{
_responseStream.WriteTo(responseStream);
responseStream.Flush();
}
}
}

客户端:

string path = Path.GetTempFileName();//in reality, wrap this in try... so as not to leave hanging tmp files
var response = client.Get<HttpWebResponse>("/foo/bar");

long length;
if (!long.TryParse(response.GetResponseHeader("X-Api-Length"), out length))
length = -1;

using (var fs = System.IO.File.OpenWrite(path))
fs.CopyFrom(response.GetResponseStream(), new CopyFromArguments(new ProgressChange((x, y) => { Console.WriteLine(">> {0} {1}".Fmt(x, y)); }), TimeSpan.FromMilliseconds(100), length));

“CopyFrom”扩展方法是直接从本项目的源代码文件“StreamHelper.cs”中借用的:Copy a Stream with Progress Reporting (感谢 Henning Dieterichs)

感谢 mythz 和 ServiceStack 的任何贡献者。伟大的工程!

关于c# - 如何使用 ServiceStack 客户端使用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14134667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com