我正在尝试理解以下文档:
文档没有描述上传的错误情况。通常我会猜测类似
System.Net.Http.HttpRequestException
.看了多条评论,看来S3确实是not support TransactionScope .似乎唯一支持的是文件级别:
和
所以我的问题是:
我的问题是关于上传多个文件(即 s3 'object'),而不是关于对单个文件进行多部分上传。
最佳答案
AFAIK,你在这里能做的最好的事情就是将它包装在一个 try catch 中:
try
{
...
}
catch (AmazonS3Exception e)
{
// implement rollback operation
...
}
catch (Exception e)
{
// no possible rollback operation, abort program ?
...
}
您可以使用 UploadDirectoryProgressEvent
跟踪进度.如果发生错误,如果您想清理,您必须比较进度,注意差异,并采取适当的措施(例如,如果您不想将对象保留在 S3 中,并且您希望整个操作是原子的)。请特别注意以下事实:
var request = new TransferUtilityUploadDirectoryRequest
{
UploadFilesConcurrently = true,
};
会对你的回滚机制产生影响。设置 UploadFilesConcurrently
真正意味着 UploadDirectoryProgressArgs
收到 UploadDirectoryProgressEvent
CurrentFile
的值为空:在这种情况下,您只能在可以删除完整远程目录的情况下执行回滚。
另请注意有关分段上传的文档:
If a multipart upload is interrupted, TransferUtility will attempt to abort the multipart upload. Under certain circumstances (network outage, power failure, etc.), TransferUtility will not be able to abort the multipart upload. In this case, in order to stop getting charged for the storage of uploaded parts, you should manually invoke TransferUtility.AbortMultipartUploads() to abort the incomplete multipart uploads.
该文档有 tracking 的示例和 aborting多部分上传。
至于你的另一个问题:
Does it makes sense to use UploadDirectory since atomic operations are at file (object) level ?
我会说这取决于。上传整个文件目录的代码可能会更清晰一些,但由于您仍然需要进行跟踪和清理,因此您不妨一个一个地处理文件。
关于c# - 如何使用 TransferUtility 上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68037980/