有没有办法用c#跟踪和上传文件和文件夹到S3?

问题描述 投票:0回答:1

我想上传一个文件夹与子文件夹和文件到S3。同时,我想跟踪这个过程。我可以得到的文件上传和跟踪的过程。但是,它只上传文件,没有子文件夹,如果文件在子文件夹中。

比如说

C:\backup
  backup\testfile1.txt
  backup\test\
  Backup\test\testfile2.txt

我上传至AWS后的结果

 Testfile1.txt
 Testfile2.txt

我想要的是:

Testfile1.txt
Test\testfile2.txt

     static void Main(string[] args)
        {
            var credentials = new BasicAWSCredentials("keyID", "secrectKey");
            s3Client = new AmazonS3Client(credentials, bucketRegion);
            TrackMPUAsync().Wait();

        }

        private static async Task TrackMPUAsync()
        {
            string[] files = Directory.GetFileSystemEntries(sourcePath, "*", SearchOption.AllDirectories);
           // string[] directories = Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories);


            try
            {
                var fileTransferUtility = new TransferUtility(s3Client);

                // Use TransferUtilityUploadRequest to configure options.
                // In this example we subscribe to an event.
                foreach(string ss in files)
                {
                    Console.WriteLine(ss);

                        var uploadRequest =
                    new TransferUtilityUploadRequest
                    {
                        BucketName = bucketName,
                        FilePath = ss,

                    };

                        uploadRequest.UploadProgressEvent +=
                            new EventHandler<UploadProgressArgs>
                                (uploadRequest_UploadPartProgressEvent);

                        await fileTransferUtility.UploadAsync(uploadRequest);
                        Console.WriteLine("Upload " + ss + " completed");

                }


            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }

        static void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e)
        {
            // Process event.
            Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
        }
c# amazon-web-services upload event-tracking
1个回答
1
投票

亚马逊S3实际上并不使用文件夹或目录。

取而代之的是 Key (实际上是一个对象的文件名) 包含对象的完整路径.

因此,该文件应称为 Test/testfile2.txt 当它被存储在S3中时。

亚马逊S3管理控制台会让它 "看起来 "有文件夹,但实际上它们并不存在。

例如,您可以将一个对象上传到 folder1/folder2/foo.txt 它将 "看起来 "好像S3已经创建了这两个文件夹,但如果对象被删除,文件夹也将消失。

因此,你应该修改你的代码,使之成为 Key 包含对象的完整路径,因为你希望它在Amazon S3 bucket中。

© www.soinside.com 2019 - 2024. All rights reserved.