我正在使用HttpClient.PutAsync
尝试使用low level multipart upload for s3。这些是大文件,所以我试图以5MB的块上传它们。
我不确定的是,如何最好地提供具有PutAsync
特定长度的任意块?我想一次上传一堆这些块,所以将每个5mb块加载到内存中并不是一个选项 - 它应该根据需要从磁盘流式传输。
例如,要从位置5 * 1024 * 1000开始上传5mb,我可以执行以下操作:
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
stream.Seek(5*1024*1000);
// limit length here to 5mb??
var content = new StreamContent(stream);
var response = await httpClient.PutAsync(url, content);
// etc..
}
但当然这会上传整个文件的剩余部分。
有什么建议吗?
答案 0 :(得分:0)
您可以执行字节数组读取,并将byteArray内容发送到PutAsync方法。
例如:
Stream.read(buffer, offset, count)
然后再做
var byteContent = new ByteArrayContent(buffer);
var response = await client.PutAsync(uri, byteContent);
您还可以尝试BufferedStream
类,它允许您为流设置缓冲区大小。
没试过,但应该大部分都有效。