【发布时间】:2017-04-01 07:24:59
【问题描述】:
我将 Amazon S3 与 .NET SDK 以及它们提供的低级 API 一起使用。我正在寻找有关尝试重新启动文件的多部分上传的方法的建议。这是一个重启,例如网络连接中断,或者在文件的所有部分上传到亚马逊之前终止程序的内部异常。
- 该文件是一个 .MTS 视频文件,大小约为 400MB。
- 文件块以 5MB 为单位上传。
我正在按照分段上传的文档使用他们的示例代码:-
for (int i = filePartCounts[0]; filePosition < contentLength; i++)
{
if (i == 10)
{
throw new Exception();
}
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = "MyAwesomeBucket",
Key = "my-file-" + now + ".mts",
UploadId = initiateResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
FilePath = "C:\\path\\file.MTS",
Timeout = new TimeSpan(0, 15, 00)
};
uploadResposes.Add(client.UploadPart(uploadRequest));
File.WriteAllText(@"C:\\file\\data.txt", "my-file-" + now + ".mts/" + i + "/" + maxPartNumber);
filePosition += partSize;
Console.WriteLine("Successfull uploaded part " + i + " of " + maxPartNumber + " - Bytes " + (filePosition - partSize) + " bytes to " + filePosition + " bytes");
}
由于这是一个原型,我将一条记录保存到一个文本文件中,在这个文件中包含 KeyName、Last Success Part Number 和 Maximum Number of Part Numbers,以便下次程序运行时可以阅读,获取键名,并从未上传的第一个块开始。目前,我通过手动调用模拟了程序错误:-
if (i == 10)
{
throw new Exception();
}
所以程序在 73 个块中的 9 个之后退出。
我在尝试从 Amazon S3 服务器取回商品时遇到问题。我打电话时遇到异常:-
client.GetObject(request);
我想取回上传的文件部分,然后再继续处理其余部分。出于显而易见的原因,我得到了“指定的密钥不存在”的异常。因为该文件尚未在 Amazon S3 上完成。
我的问题是,如果这不起作用,我如何取回已成功上传到 Amazon S3 的文件部分,然后继续向其中添加第 10 部分?
非常感谢任何帮助! 谢谢。
【问题讨论】:
标签: c# .net amazon-web-services file-upload amazon-s3