使用Nancy流式传输(SqlFile-)流



我想知道如何通过我们的Nancy-API直接向客户端发送(在我的情况下)SqlFileStream,而不在内存中加载流。

到目前为止,我成功地传递了流,但Nancy的StreamResponse将sourcestream(=SqlFileStream)复制到outputstream,这会导致内存大量增加。我只想让它把水流送过去。

我在WebApi做了这项工作,WebApi在Owin管道中注册。没有明显的内存增加,这在我们谈论相当大的流(>100MB)时非常好。当然,如果可能的话,我宁愿坚持使用一个API应用程序框架。

有什么建议吗?

我想我找到了一个解决方案。最后做起来并不太难。

我创建了一个自定义南希。响应=>FlushingStreamResponse。当这是我们GET的结果时,向它传递一个流和一个mimetype会导致立即流到客户端。

public class FlushingStreamResponse : Response
{
public FlushingStreamResponse(Stream sourceStream, string mimeType)
{
Contents = (stream) =>
{
var buffer = new byte[16 * 1024];
int read;
while ((read = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
{
stream.Write(buffer, 0, read);
stream.Flush();
}
sourceStream.Dispose();
};
StatusCode = HttpStatusCode.OK;
ContentType = mimeType;
}
}

最新更新