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

有没有办法用c#跟踪并上传文件和文件夹到S3?,c#,amazon-web-services,upload,event-tracking,C#,Amazon Web Services,Upload,Event Tracking,我想将包含子文件夹和文件的文件夹上载到S3。同时,我想跟踪这个过程。我可以得到文件上传和跟踪的过程。但是,它只上载文件,如果文件位于子文件夹中,则不上载子文件夹 例如: C:\backup backup\testfile1.txt backup\test\ Backup\test\testfile2.txt 上传到AWS后的结果: Testfile1.txt Testfile2.txt 我想要的是: Testfile1.txt Test\testfile2.txt

我想将包含子文件夹和文件的文件夹上载到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);
        }
Testfile1.txt
Test\testfile2.txt
静态void Main(字符串[]参数)
{
var凭证=新的基本凭证(“keyID”、“secrectKey”);
s3Client=新AmazonS3Client(凭证、bucketRegion);
TrackMPUAsync().Wait();
}
专用静态异步任务TrackMPUAsync()
{
string[]files=Directory.GetFileSystemEntries(sourcePath,“*”,SearchOption.AllDirectories);
//string[]directories=Directory.GetDirectories(sourcePath,“*”,SearchOption.AllDirectories);
尝试
{
var fileTransferUtility=新的TransferUtility(s3Client);
//使用TransferUtilityUploadRequest配置选项。
//在本例中,我们订阅了一个事件。
foreach(文件中的字符串ss)
{
控制台写入线(ss);
var上传请求=
新TransferUtilityUploadRequest
{
BucketName=BucketName,
FilePath=ss,
};
uploadRequest.UploadProgressEvent+=
新事件处理程序
(uploadRequest\u UploadPartProgressEvent);
等待fileTransferUtility.UploadAsync(uploadRequest);
控制台写入线(“上传”+ss+“完成”);
}
}
捕获(AmazonS3E例外)
{
WriteLine(“在服务器上遇到错误。消息:{0}写入对象时”,e.Message);
}
捕获(例外e)
{
WriteLine(“在服务器上遇到未知。消息:{0}写入对象时”,e.Message);
}
}
静态无效uploadRequest\u UploadPartProgressEvent(对象发送方,UploadProgressArgs e)
{
//处理事件。
WriteLine(“{0}/{1}”,e.TransferredBytes,e.TotalBytes);
}

AmazonS3实际上并不使用文件夹或目录

相反,对象的
键(实际上是文件名)包含对象的完整路径

因此,当文件存储在S3中时,应将其命名为
Test/testfile2.txt

AmazonS3管理控制台将使它看起来像有文件夹,但实际上它们并不存在

例如,您可以将一个对象上载到
folder1/folder2/foo.txt
,它将“显示”为S3创建了两个文件夹,但如果删除该对象,文件夹也将消失


因此,您应该更改代码,以便
包含您希望在Amazon S3存储桶中包含的对象的完整路径。

如何上载对象?你能给我们看看你的密码吗?