首页 > 解决方案 > 当我使用 AWS.S3.ManagedUpload javascript 在上传文件中添加标签值时,如何防止 & 变成 &?

问题描述

我正在开发一个 javascript 函数来将文件上传到 aws 中的 S3 存储桶。我必须包含一个简短的描述,为此我在 S3 请求中使用标签值,如下所示:

      var upload = new AWS.S3.ManagedUpload({
        partSize: 6 * 1024 * 1024, queueSize: 5,
        params: params,
        tags: [{Key: 'Key', Value: stateTag}, 
              {Key: 'desc', Value: convertToEncodeHTML(stateDescription)}]
      });

根据 aws 文档https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html 我必须将特殊字符转换为 html 代码。

要将特殊字符转换为 html 代码,我使用了这个 javascript 函数:


    export function convertToEncodeHTML(string) { 
        var i = string.length, 
            a = []; 
    
        while (i--) { 
            var iC = string[i].charCodeAt(); 
            if ((iC < 65 || iC > 127 || (iC > 90 && iC < 97)) ) { 
                a[i] = '&#' + iC + ';'; 
            } else { 
                a[i] = string[i]; 
            } 
        } 
        return a.join(''); 
    } 

此功能运行良好,但是当我在 Chrome 控制台中检查请求时,我看到由于错误的请求 400 而被拒绝。

控制台显示此请求已发送:

<Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <TagSet>
        <Tag>
            <Key>Key</Key>
            <Value>myKeyValue</Value>
        </Tag>
        <Tag>
            <Key>desc</Key>
            <Value>retries en redis&amp;#44; agent backoff&amp;#44; new connector  </Value>
        </Tag>
    </TagSet>
</Tagging>

“&”字符被转换为“&” 被aws拒绝:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>InvalidTag</Code>
    <Message>The TagValue you have provided is invalid</Message>
    <TagKey>desc</TagKey>
    <TagValue>retries en redis&amp;#44; agent backoff&amp;#44; new connector  </TagValue>
</Error>

你知道如何解决这个问题吗?

我将非常感谢您的帮助。

标签: javascriptamazon-web-servicesamazon-s3put

解决方案


推荐阅读