使用 WebClient 或 HttpClient 分多个部分将文件上传到 Amazon S3

问题描述

我希望使用 C# 和 WebClient 或 HttpClient 将文件分多个部分上传到 Amazon S3。上传过程分为 4 个步骤:

  1. 启动分段上传
  2. 为每个部分创建预签名的 URL
  3. 上传对象的部分
  4. 完成分段上传

我已经为步骤 1、2 和 4 编写了方法,但我不清楚如何实际分部分上传文件。这些部分的大小需要为 5mb(或者对于最后一部分来说更小),我已经创建了一个方法来计算所选文件应该分成多少部分。

以下是使用预签名 URL 在单个部分中上传文件的工作示例:

public void UploadSingleFilePresignedUrl(string filePath,string fileName)
{
    string preSignedUrl = _server.GeneratePreSignedURL(fileName);

    HttpWebRequest httpRequest = WebRequest.Create(preSignedUrl) as HttpWebRequest;
    httpRequest.Method = "PUT";
    using (Stream dataStream = httpRequest.GetRequestStream())
    {
        byte[] buffer = new byte[8000];
        using FileStream fileStream = new(filePath,FileMode.Open,FileAccess.Read);
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer,buffer.Length)) > 0)
        {
            dataStream.Write(buffer,bytesRead);
        }
    }
        HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse;
}

在第 2 步中,我为每个部分创建了一个预签名 URL 列表。我计划遍历列表并将预先签名的 URL 和部件号传递给每个部件的方法

此外,每当您上传部分时,Amazon S3 都会在其响应中返回一个 ETag 标头。对于每一个part上传,我需要记录part号和ETag值。

解决方法

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

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

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