【问题标题】:Can not upload a file containing "[" in the name to IBM Cloud Object Storage无法将名称中包含“[”的文件上传到 IBM Cloud Object Storage
【发布时间】:2018-11-04 07:54:30
【问题描述】:

我尝试使用以下代码上传到 IBM Cloud Object Storage (ICOS),但有些文件无法上传。 失败的文件在文件名中包含符号“[”或“]”。

TransferUtility Utl = new TransferUtility(objClient);
TransferUtilityUploadDirectoryRequest request = new   TransferUtilityUploadDirectoryRequest
{
    BucketName = "Correct Backet name"
    Directory = "Correct directory name" ex. "C:\\testd1\\testd2"
    KeyPrefix = "Correct prefix"
    SearchOption = SearchOption.AllDirectories,
    SearchPattern = "*.*"
};

Utl.UploadDirectory(request);

语言:.NET C#

API:AWSSDK.Core 3.3.22.5、AWSSDK.S3 3.3.18.2

异常名称:Amazon.S3.AmazonS3Exception
消息:“无效参数”

InnerException 名称:Amazon.Runtime.Internal.HttpErrorResponseException
消息:“远程服务器返回错误:(400) Bad Request”

可以正常上传“test.txt”等普通名称的文件。
AWS S3 或其他兼容 S3 的存储服务不会出现这种现象。
(但我只尝试过其他 S3 兼容服务之一......)

你能告诉我为什么我不能上传到ICOS吗?有什么解决办法?

最好的问候。

【问题讨论】:

  • 就个人而言,我会考虑对文件名进行散列处理,或去除非字母数字字符。那行得通吗?不幸的是,我的 C# 很弱,所以我无法提供一个示例来说明您如何做到这一点,但无论如何这可能是一种很好的做法。

标签: c# ibm-cloud object-storage


【解决方案1】:

这似乎是 AWS 没有严格执行其发布的限制的情况。根据AWS S3 docs,“避免在键名中使用以下字符,因为要进行重要的特殊处理以确保所有应用程序的一致性。”

  • 反斜杠(“\”)
  • 左大括号(“{”)
  • 不可打印的 ASCII 字符(128–255 个十进制字符)
  • 插入符号(“^”)
  • 右大括号 ("}")
  • 百分比字符(“%”)
  • 重音/反勾号(“`”)
  • 右方括号(“]”)
  • 引号
  • “大于”符号 (">")
  • 左方括号(“[”)
  • 波浪号(“~”)
  • “小于”符号(“
  • “磅”字符(“#”)
  • 垂直条/管(“|”)

如果 URL 编码 ([object-key] -> %5Bobject-key%5D) 一切都应该没问题。 HttpUtility 类中的 UrlEncode(string) 方法可能会有所帮助 (docs)。

【讨论】:

    【解决方案2】:

    感谢您的建议。

    我想做以下事情:
    - 上传源文件的名称包含符号“[”和“]”,但我不想更改文件名。
    但是,可以更改上传的目标文件名(= 对象键?)。
    - 我想使用“UploadDirectory”方法上传文件。

    我搜索了一种如何通过“UploadDirectory”方法上传并指定要在存储桶上创建的对象的键名的方法。 但我没有找到好方法。

    我认为使用“UploadDirectory”方法,我无法指定要创建的对象的键名。 (因此,我认为编码是做​​不到的。)

    在ICOS上,使用“UploadDirectory”方法上传文件名中包含“[”或“]”的文件是不可能的吗?

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 2018-08-28
      • 1970-01-01
      • 2020-02-25
      • 2019-01-16
      • 2019-04-08
      • 2020-01-18
      • 2018-12-23
      • 1970-01-01
      相关资源
      最近更新 更多