0

我正在尝试将文件上传到 S3 存储桶。我正在使用亚马逊开发工具包 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”,此键会导致异常。

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

4

2 回答 2

0

由于密钥直接与 url 相关,因此某些字符(在您的情况下为 &)需要正确转义。

一般准则:

命名存储桶和密钥

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

  1. 使用 3 到 63 个字符。
  2. 仅使用小写字母(至少一个)、数字、'.' 和 '-'。不要以 '.' 开始或结束存储桶名称。并且不要在“。”之后或之前。带有'-'。可以使用任何正确编码的 UTF-8 字符来命名键。
  3. 文字“+”字符应始终进行 URL 编码。
于 2013-03-08T15:12:33.843 回答
0

解决了。我正在使用无效字符设置元数据。对象的键值没有任何磨损。但是元数据很棘手。

于 2013-03-08T18:53:49.500 回答