【问题标题】:Error downloading an object from Amazon S3 bucket using C#使用 C# 从 Amazon S3 存储桶下载对象时出错
【发布时间】:2013-12-11 07:14:22
【问题描述】:

我使用了非常基本的代码从 Amazon S3 下载文件。 我尝试了两种不同的代码。

  1. 被评论的GetObjectResponse抛出错误

    System.Xml.XmlException: There are multiple root elements. Line 2, position 2.
    at System.Xml.XmlTextReaderImpl.Throw(Exception e)
    at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
    at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res)
    at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
    at System.Xml.XmlTextReaderImpl.Read()
    at System.Xml.XmlTextReader.Read()
    

    等等,

  2. 带有TransferUtilityDownloadRequest 的代码。我不确定这种方法是否正确。在Amazon Site 中找到了类似的示例,因此尝试了。

源代码

  private static void AmazonS3Access()
    {
        string accessKey = "my_access_key";
        string secretKey = "my_secret_key";

        AmazonS3Config config = new AmazonS3Config();
        config.ServiceURL = "s3.amazonaws.com";

        AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(
                accessKey,
                secretKey,
                config);
        GetObjectRequest request = new GetObjectRequest();
        request.BucketName = "bucket";
        request.Key = "myfile.extension";
        try
        {
            TransferUtilityDownloadRequest myfile = new TransferUtilityDownloadRequest();                
            myfile.WithBucketName(request.BucketName);
            myfile.WithKey(request.Key);
            myfile.WithFilePath("D:\\S3File\\myfile.extension");  
            //GetObjectResponse response = client.GetObject(request);
            //response.WriteResponseStreamToFile("D:\\S3File\\myfile.extension");
        }
        catch (Exception Ex)
        {
            Console.WriteLine(Ex.ToString());
        }
    }

如何从 Amazon S3 下载对象。提前致谢。

注意:

  1. 我正在使用 VS 2010 和 .NetFramework 3.5
  2. 我正在使用 AmazonSDK.dll 旧版本

解决方案:

在程序中添加网络代理凭据后,它开始正常工作。

【问题讨论】:

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


    【解决方案1】:

    public Stream DownloadS3Object(string awsBucketName, string keyName)

        {
            using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client())
            {
                Stream imageStream = new MemoryStream();
                GetObjectRequest request = new GetObjectRequest { BucketName = awsBucketName, Key = keyName };
                using (GetObjectResponse response = client.GetObject(request))
                {
                    response.ResponseStream.CopyTo(imageStream);
                }
                imageStream.Position = 0;
                // Clean up temporary file.
                // System.IO.File.Delete(dest);
                return imageStream;
            }
        }
    

    在函数获取流路径中传递值,使用下面的方法将其保存在文件夹中。

    SaveStreamToFile(文件夹名 + "/", MainStreamAwsPath);

    您可以应用简单的 c# 代码下载该文件夹。

    还可以从 aws.amazon.com/sdkfornet 下载适用于 .net 的最新 AWS 开发工具包,并将该 dll 添加到项目中

    【讨论】:

    • 它没有正确获取GetObjectResponse 值。An unhandled exception of type 'System.Xml.XmlException' occurred in AWSSDK.dll Additional information: The 'link' start tag on line 5 position 2 does not match the end tag of 'head'. Line 6, position 3. 错误消息
    • aws.amazon.com/sdkfornet下载最新的sdk,并在项目中添加dll。
    【解决方案2】:
        public Stream DownloadS3Object(string awsBucketName, string keyName)
    
        {
            using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client())
            {
                Stream imageStream = new MemoryStream();
                GetObjectRequest request = new GetObjectRequest { BucketName = awsBucketName, Key = keyName };
                using (GetObjectResponse response = client.GetObject(request))
                {
                    response.ResponseStream.CopyTo(imageStream);
                }
                imageStream.Position = 0;
                // Clean up temporary file.
                // System.IO.File.Delete(dest);
                return imageStream;
            }
        }
    

    注意:

    我正在使用带有 .NetFramework 3.5 的 VS 2010 我正在使用 AmazonSDK.dll 旧版本

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 2019-05-30
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多