我一直在努力解决这个问题,希望您能为我提供帮助。不知何故,我的编译器仅接受InitiateMultipartUploadAsync而不接受常规的InitiateMultipartUpload,并且绝对需要使用回调作为参数进行编译,但是我可以弄清楚给他提供什么回调函数。
private static async Task UploadObjectAsync()
{
// Create list to store upload part responses.
List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
// Setup information required to initiate the multipart upload.
InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
{
BucketName = "XXXXXXXXX",
Key = "videos/multipart"
};
// Initiate the upload.
InitiateMultipartUploadResponse initResponse =
await S3Client.InitiateMultipartUploadAsync(initiateRequest);
// Upload parts.
long contentLength = new FileInfo("videotest").Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
try
{
Console.WriteLine("Uploading parts");
long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++)
{
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = "XXXXXXXX",
Key = "videos/multipart",
UploadId = initResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
FilePath = "videotest"
};
// Track upload progress.
uploadRequest.StreamTransferProgress +=
new EventHandler<StreamTransferProgressArgs>(UploadPartProgressEventCallback);
// Upload a part and add the response to our list.
uploadResponses.Add(await S3Client.UploadPartAsync(uploadRequest));
filePosition += partSize;
}
// Setup to complete the upload.
CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
{
BucketName = "XXXXXXXXXXX",
Key = "videos/multipart",
UploadId = initResponse.UploadId
};
completeRequest.AddPartETags(uploadResponses);
// Complete the upload.
CompleteMultipartUploadResponse completeUploadResponse =
await S3Client.CompleteMultipartUploadAsync(completeRequest);
}
catch (Exception exception)
{
Console.WriteLine("An AmazonS3Exception was thrown: {0}", exception.Message);
// Abort the upload.
AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
{
BucketName = "XXXXXXXXX",
Key = "videos/multipart",
UploadId = initResponse.UploadId
};
await S3Client.AbortMultipartUploadAsync(abortMPURequest);
}
}
public static void UploadPartProgressEventCallback(object sender, StreamTransferProgressArgs e)
{
// Process event.
Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
}
这段代码是从aws官方示例中得到启发的:https://docs.aws.amazon.com/AmazonS3/latest/dev/LLuploadFileDotNet.html所以我真的不明白为什么这行不通!当前使用上面的代码,Visual Studio告诉我InitiateMultipartUploadAsync,UploadPartAsync,CompleteMultipartUploadAsync和AbortMultipartUploadAsync都需要回调函数,但是1)示例说回调是可选的2)我尝试的每个回调都不起作用。预先感谢
答案 0 :(得分:0)
万一其他人遇到相同的错误,我会完全更改代码并使用以下解决方案:https://github.com/aws/aws-sdk-net/issues/562
答案 1 :(得分:0)
您可以这样启动它:
s3Client = new AmazonS3Client(BUCKETREGION);
var initiateRequest = new InitiateMultipartUploadRequest { BucketName = BUCKET, Key = KEY };
await s3Client.InitiateMultipartUploadAsync(initiateRequest).ContinueWith(response =>
{
if (!string.IsNullOrEmpty(response.Result.UploadId))
{
uploadId = response.Result.UploadId;
}
else
{
Debug.WriteLine(response.Exception);
}
});