gpt4 book ai didi

c# - 如何使用 TransferUtility 上传多个文件

转载 作者:行者123 更新时间:2023-12-04 13:26:42 27 4
gpt4 key购买 nike

我正在尝试理解以下文档:

  • TransferUtility.UploadDirectory

  • 文档没有描述上传的错误情况。通常我会猜测类似 System.Net.Http.HttpRequestException .
    看了多条评论,看来S3确实是 not support TransactionScope .似乎唯一支持的是文件级别:
  • Are writes to Amazon S3 atomic (all-or-nothing)?


  • https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html#ConsistencyModel

  • 所以我的问题是:
  • 我在哪里可以找到 UploadDirectory 的错误情况?
  • 由于原子操作是在文件(对象)级别,因此使用 UploadDirectory 是否有意义?

  • 我的问题是关于上传多个文件(即 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 的值为空:
  • https://github.com/aws/aws-sdk-net/issues/317

  • 在这种情况下,您只能在可以删除完整远程目录的情况下执行回滚。
    另请注意有关分段上传的文档:

    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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com