C#通过HttpClient发送流“正在播放”生成的流

问题描述

我正在尝试使用HttpClient发送数据流。 我的流不是FileStream,也不是任何其他“简单”类型的流。 我有一些类似于生产者-消费者流(使用内部BlockingStream)的东西。 所以我允许从生产者流中读取数据,而它是在后台生产数据的。 然后我尝试使用以下方式发送它:

    using (var streamContent = new StreamContent(producerStream,10485760))
    {
        using (var response = await m_httpClient.PutAsync(uri,streamContent))
            response.EnsureSuccessStatusCode();
    }

问题是,该请求首先生成整个数据,然后通过http发送。

我的生产者流不允许寻求更大的检查长度。因此Http Request不能设置Content-Length,因为在生成开始时未知。

我还尝试用ReedSeekableStream(缓冲区)包装我的流,因此它至少允许Seek,但不知道真正的内容长度。问题是:如果我设置的Stream Length太小,则HttpClient太早停止写数据,如果我设置了更大的Stream Length,则HttpClient在发送数据后会引发异常。 Exception表示无法在结束所有数据发送之前关闭内部流。

我想在后台创建流时通过HTTP发送我的流(例如,在写入文件时很容易)。也许您知道任何解决方案?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)