gpt4 book ai didi

c# - 在 .net Core 中使用 HttpClient 下载分块编码文件

转载 作者:太空狗 更新时间:2023-10-29 19:47:40 26 4
gpt4 key购买 nike

我正在使用 API 通过 HttpClient 下载文件。当我的整个文件适合单个请求时,我能够保存文件并正确打开它。

当整个文件不适合我的最大块大小时,我必须向我的 API 发出多个请求以获取该文件,并且它会以分块编码的形式返回。据猜测,这些 block 没有正确解码并最终出现在我的文件中,这破坏了它。

有没有办法对来自 GetStreamAsync 的响应进行分块解码?

public byte[] GetFileContent(File file)
{
var baseFileUri = BASE_URI + $"platform/files/{file.Id}";

int chunkSize = 128 * 1024;

chunkSize = file.NativeSize <= chunkSize ? file.NativeSize : chunkSize;
int start = 0;

using (MemoryStream stream = new MemoryStream())
{
while (start < file.NativeSize)
{
Get(baseFileUri, new List<KeyValuePair<string, string>>() { new KeyValuePair<string, string>("offset", start.ToString()), new KeyValuePair<string, string>("size", chunkSize.ToString()) }, stream);

start = start + chunkSize;

if (file.NativeSize < start + chunkSize)
{
chunkSize = file.NativeSize - start;
}
}

return stream.ToArray();
}
}

private void Get(string uri, List<KeyValuePair<string, string>> parameters, Stream stream)
{
var requestUri = BuildUriString(uri, parameters);

var methodResult = _client.GetStreamAsync(requestUri);
methodResult.Result.CopyTo(stream);
}

最佳答案

在您的代码中,您通过执行多个请求手动获取 block 。当请求的 API 支持分块响应时,您可能会尝试设置 "Transfer-Encoding": "chunked" header 并让 HttpClient 库处理分块响应。 header 可以在 HttpClient 上设置如下:

_client.DefaultRequestHeaders.TransferEncodingChunked = false;

关于c# - 在 .net Core 中使用 HttpClient 下载分块编码文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51544905/

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