使用“PutObjectRequest”的对象的键值中的AWSSDK .Net S3无效字符

时间:2013-03-08 11:08:28

标签: c# .net encoding amazon-s3

我正在尝试将文件上传到S3存储桶。我使用的是亚马逊SDK AWSSDK。

几乎每个文件都被上传,但有些文件名有混合语言和字符,如; “ms.video.downloader / music / youtube /дашаастафьева& nikita - синееплатье.mp3”

我的代码是

var request = new PutObjectRequest();
try {
    using (var fileStream = new FileStream(file.LocalPath, FileMode.Open)) {
        request.WithBucketName(_bucketName)
                .WithCannedACL(S3CannedACL.PublicRead).WithMetaData(metadata)
                .WithKey(file.S3Path).InputStream = fileStream;
        client.PutObject(request);
    }
} catch (Exception) {

}

file.S3Path值包含“ms.video.downloader / music / youtube /дашаастафьева& nikita - синееплатье.mp3”,此键导致异常。

我该如何处理?我读到Key值是unicode,所以应该没有问题。

2 个答案:

答案 0 :(得分:0)

由于密钥直接与网址相关,因此某些字符(以及您的情况)需要正确转义。

一般准则:

  

<强> Naming Buckets and Keys

     

虽然可以使用任何字母数字字符命名存储桶,   遵循一些简单的命名规则将确保您可以参考   你的桶使用约定.s3.amazonaws.com。

     
      
  1. 使用3到63个字符。
  2.   
  3. 仅使用小写字母(至少一个),数字,'。'和' - '。不要使用'。'开始或结束存储桶名称。并且不要跟随或   先于'。'用' - '。键可以使用任何正确编码命名   UTF-8字符。
  4.   
  5. 字面'+'字符应始终为URL编码。
  6.   

答案 1 :(得分:0)

解决了它。我用无效字符设置元数据。对象的键值没有任何问题。但元数据很棘手。