Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件上载到AmazonS3存储桶_C#_.net_Amazon Web Services_Amazon S3 - Fatal编程技术网

C# 将文件上载到AmazonS3存储桶

C# 将文件上载到AmazonS3存储桶,c#,.net,amazon-web-services,amazon-s3,C#,.net,Amazon Web Services,Amazon S3,我知道有很多这样的线程,我尝试了100个示例,它们都抛出相同的异常: 指定的存储桶无效 我联系了s3管理员,他说,他这边的一切都是正确的,他说,他设置了完全权限,没有拒绝声明,所以我们可以测试, 但是我的应用程序仍然抛出相同的异常,下面是代码 using Amazon; using Amazon.S3; using Amazon.S3.Transfer; namespace AmazonS3 { public class FileUploader { priva

我知道有很多这样的线程,我尝试了100个示例,它们都抛出相同的异常:

指定的存储桶无效

我联系了s3管理员,他说,他这边的一切都是正确的,他说,他设置了完全权限,没有拒绝声明,所以我们可以测试, 但是我的应用程序仍然抛出相同的异常,下面是代码

using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;

namespace AmazonS3
{
    public class FileUploader
    {
        private const string S3_Bucket_ARN = "(hidden)";
        private const string IAM_User_ARN = "(hidden)";
        private const string Access_Key_ID = "(hidden)";
        private const string Secret_access_Key = "(hidden)";

        public void UploadFile(string Filepath)
        {
            Program.WriteLine(MessageStatus.Neutral, "[1/4] Connecting to Amazon S3 . . .");
            using (IAmazonS3 client = new AmazonS3Client(Access_Key_ID, Secret_access_Key, RegionEndpoint.USEast1))
            {
                Program.WriteLine(MessageStatus.Neutral, "[2/4] Preparing upload request . . .");
                var uploadRequest = new TransferUtilityUploadRequest
                {
                    FilePath = Filepath,
                    BucketName = S3_Bucket_ARN,
                    CannedACL = S3CannedACL.PublicRead
                };

                Program.WriteLine(MessageStatus.Neutral, $"[3/4] Uploading file: \"{Filepath}\" . . .");
                var fileTransferUtility = new TransferUtility(client);
                fileTransferUtility.Upload(uploadRequest);

                Program.WriteLine(MessageStatus.Neutral, $"[4/4] File: \"{Filepath}\" successfully uploaded.");
            }
        }
    }
}
隐藏的字符串当然被我的真实凭证所取代,我现在刚刚编辑了它们。
不管怎样,这里有什么不正确的地方?我已经被困了好几天了,提前谢谢。

我最近使用了下面的方法,它可能会有所帮助

        private string UploadAWS(Stream stream, string contentType, string name,string orgfileName,string lable)
    {
        string accessKey = "xxxxx";
        string secretKey = "xxxxxxx";

        using (client = new AmazonS3Client(accessKey, secretKey, Amazon.RegionEndpoint.USEast1))
        {
            return WritingAnObject(stream, contentType, name, orgfileName,lable);
        }
    }

    private string WritingAnObject(Stream stream, string contentType, string name,string orgfileName,string lable)
    {
        string rtn = string.Empty;

        try
        {
            string bucketName = "xxxxxxxx";

            PutObjectRequest putRequest2 = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = name,
                ContentType = contentType,
                InputStream = stream
            };
            putRequest2.Metadata.Add("x-amz-meta-title", lable);
            putRequest2.Metadata.Add("x-amz-meta-original-file-name", orgfileName);

            PutObjectResponse response2 = client.PutObject(putRequest2);

        }
        catch (AmazonS3Exception amazonS3Exception)
        {
            if (amazonS3Exception.ErrorCode != null &&
                (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                ||
                amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
            {
                rtn="Check the provided AWS Credentials.";
            }
            else
            {
                rtn="Error occurred. Message:"+ amazonS3Exception.Message + " when writing an object";
            }
        }

        return rtn;

    }

我最近使用了下面的方法,可能会有所帮助

        private string UploadAWS(Stream stream, string contentType, string name,string orgfileName,string lable)
    {
        string accessKey = "xxxxx";
        string secretKey = "xxxxxxx";

        using (client = new AmazonS3Client(accessKey, secretKey, Amazon.RegionEndpoint.USEast1))
        {
            return WritingAnObject(stream, contentType, name, orgfileName,lable);
        }
    }

    private string WritingAnObject(Stream stream, string contentType, string name,string orgfileName,string lable)
    {
        string rtn = string.Empty;

        try
        {
            string bucketName = "xxxxxxxx";

            PutObjectRequest putRequest2 = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = name,
                ContentType = contentType,
                InputStream = stream
            };
            putRequest2.Metadata.Add("x-amz-meta-title", lable);
            putRequest2.Metadata.Add("x-amz-meta-original-file-name", orgfileName);

            PutObjectResponse response2 = client.PutObject(putRequest2);

        }
        catch (AmazonS3Exception amazonS3Exception)
        {
            if (amazonS3Exception.ErrorCode != null &&
                (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                ||
                amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
            {
                rtn="Check the provided AWS Credentials.";
            }
            else
            {
                rtn="Error occurred. Message:"+ amazonS3Exception.Message + " when writing an object";
            }
        }

        return rtn;

    }
问题在于:

BucketName = S3_Bucket_ARN
ARN是,它是唯一标识Amazon资源的名称空间。。。但是在这种情况下,
BucketName
只需要bucket的实际名称,例如
my example bucket

如果使用的是bucket ARN,则传递的值类似于
ARN:aws:s3:::my example bucket
,它不仅是bucket名称,而且还包含在bucket名称中无效的字符(

指示当bucket名称不正确时可能出现两种不同的错误:

InvalidBucketName |指定的存储桶无效。
NoSuchBucket |指定的bucket不存在。
第一个表示bucket名称包含无效字符。

问题在于:

BucketName = S3_Bucket_ARN
ARN是,它是唯一标识Amazon资源的名称空间。。。但是在这种情况下,
BucketName
只需要bucket的实际名称,例如
my example bucket

如果使用的是bucket ARN,则传递的值类似于
ARN:aws:s3:::my example bucket
,它不仅是bucket名称,而且还包含在bucket名称中无效的字符(

指示当bucket名称不正确时可能出现两种不同的错误:

InvalidBucketName |指定的存储桶无效。
NoSuchBucket |指定的bucket不存在。

第一个表示bucket名称包含无效字符。

如果所有100个示例都抛出相同的错误,那么您的bucket可能无效?你绝对确定你使用了正确的详细信息吗?是的,这是我第一次想到的,但是s3管理员给我发送了那些凭据,即使在那之后,我们再次检查,凭据是正确的:/n也许您的bucket名称有错误。您的bucket名称有问题。我敢打赌问题在于
BucketName=S3\u bucket\ARN
BucketName
需要一个bucket名称,而不是ARN。在这里使用类似于
arn:aws:s3:…
的值肯定是无效的。如果所有100个示例都抛出相同的错误,那么您的bucket可能是无效的?你绝对确定你使用了正确的详细信息吗?是的,这是我第一次想到的,但是s3管理员给我发送了那些凭据,即使在那之后,我们再次检查,凭据是正确的:/n也许您的bucket名称有错误。您的bucket名称有问题。我敢打赌问题在于
BucketName=S3\u bucket\ARN
BucketName
需要一个bucket名称,而不是ARN。在此处使用类似于
arn:aws:s3:…
的值肯定是无效的。再次引发相同的异常:/但是感谢您的帮助Gain引发相同的异常:/但是感谢您的帮助