Gar*_*day 6 amazon-s3 amazon-web-services node.js aws-sdk-nodejs
我的 S3 存储桶中有对象,但我无法控制键的名称。其中一些键具有特殊字符,AWS SDK 不喜欢它们。
\n\n例如,一个对象键是:folder/\xe2\x80\x8dJohnson, Scott to JKL-Discovery.pdf
,乍一看可能看起来不错,但如果我对它进行 URL 编码:folder%2F%E2%80%8DJohnson%2C+Scott+to+JKL-Discovery.pdf
,您可以看到在之后folder/
(或编码时)之前folder%2F
有一个随机的字符序列。%E2%80%8D
Johnson
目前尚不清楚这些字符从何而来,但是,我需要能够处理这个用例。当我尝试使用 Node.js AWS SDK 复制该对象时,
\n\nconst copyParams = {\n Bucket,\n CopySource,\n Key : `folder/\xe2\x80\x8dJohnson, Scott to JKL-Discovery.pdf`\n };\n let metadata = await s3.copyObject(copyParams).promise();\n
Run Code Online (Sandbox Code Playgroud)\n\n它失败并且找不到对象,如果我有encodeURI()
钥匙,它也会失败。
我该如何处理这个问题?
\n\n不要建议我更改键名中允许的字符。我无法控制这件事
\n尝试你的字符串,有一个棘手的“零宽度空格”unicode 字符...\n http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=342+ 200+213&模式=字节
\n我会清理字符串,删除 unicode 字符,然后按照官方文档的要求进行 url 编码。
\nencodeURI(\'folder/\xe2\x80\x8djohnson, Scott to JKL-Discovery.pdf\'.replace(/[^\\x00-\\x7F]/g, ""))\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
3148 次 |
最近记录: |