c# - 使用非默认权限将文件上传到 Amazon S3

标签 c# amazon-web-services amazon-s3

我正在尝试使用 .NET SDK 将文件上传到 Amazon S3。上传工作正常,除了它正在应用 default permission到上传的文件,这是“私有(private)”。

我想将上传文件的权限设置为“BucketOwnerFullControl”。

下面是我的代码,我不太确定我需要对它做些什么才能让它正常工作。

    static string accessKeyID = "";
    static string secretAccessKey = "";
    static string existingBucketName = "bucket";

    static void Main(string[] args)
    {
        NameValueCollection appConfig = ConfigurationManager.AppSettings;
        accessKeyID = appConfig["accesskey"];
        secretAccessKey = appConfig["secretkey"];

        string[] files = Directory.GetFiles("C:\\amazontestdirectory");

            foreach (string fileName in files)
            {
                try
                {
                    TransferUtility fileTransferUtility = new TransferUtility(accessKeyID, secretAccessKey);

                    // Upload a file, file name is used as the object key name.
                    fileTransferUtility.Upload(fileName, existingBucketName);
                }
                catch (AmazonS3Exception s3Exception)
                {
                    Console.WriteLine("AWS error: " + s3Exception.Message, s3Exception.InnerException);

                    //Open a file for writing
                    string errorOutputFileName = System.IO.Path.GetFullPath("C:\\amazontestdirectory\\logs\\errorLog.txt");

                    //Get a StreamWriter class that can be used to write to the file
                    if (File.Exists(errorOutputFileName))
                    {
                        StreamWriter objStreamWriter;
                        objStreamWriter = File.AppendText(errorOutputFileName);
                        objStreamWriter.WriteLine();
                        objStreamWriter.WriteLine(DateTime.Now.ToString() + " - AWS error: " + s3Exception.Message, s3Exception.InnerException);

                        //Close the stream
                        objStreamWriter.Close();
                    }
                }
            }
        }

最佳答案

要在使用 TransferUtility 时设置权限,您需要使用接受 TransferUtilityUploadRequest 的上传覆盖。这使您可以在上传文件时设置更高级的选项。

TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
{
    BucketName = existingBucketName,
    FilePath = fileName,
    CannedACL = S3CannedACL.BucketOwnerFullControl
};

// Upload a file, file name is used as the object key name.
fileTransferUtility.Upload(request);

关于c# - 使用非默认权限将文件上传到 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19734882/

相关文章:

c# - 网络套件 API : Update Custom Object Field

c# - GridView 数据绑定(bind)

hadoop - 将 S3 用于 HIVE 元存储?

amazon-s3 - 如何修复 S3 中的 "Exactly one of TransitionDate and TransitionInDays must be specified"

c# - WP8.1:Cortana uri协会?

c# - 使用 ASP.NET 开发服务器进行单元测试 MVC

shell - 如何将 Cloudformation 的输出传递给 shell 脚本

sql - Athena 查询存储为字符串的 JSON 字段

amazon-web-services - Amazon AWS EC2 - 获取 .cer 文件而不是 .pem

ruby-on-rails - 在 Carrierwave 中使用不同的 S3 存储桶进行生产和开发