-6ren">
gpt4 book ai didi

node.js - 使用 REST API 将 json 保存在 azurestorage blob 中时,json 中缺少大括号

转载 作者:行者123 更新时间:2023-12-02 07:02:06 26 4
gpt4 key购买 nike

我尝试保存一个 json,其中包含以下带有特殊字符“ø”的 json。

json 是 {"username":"Jøhn"}。

我已使用此 API 将 json 保存在 azure blob ==> https://${storageAccountName}.blob.core.windows.net/${containerName}/${name}${sasToken }

保存在 blob 容器中的 json 是 {"username":"Jøhn"(最后一个大括号缺失)。

rest api 中使用的 header 为:'x-ms-blob-type': 'BlockBlob', 'x-ms-date':日期, 'x-ms-版本': '2016-05-31', '内容类型':'文本/纯文本', '内容长度': value.length

代码是:

const date = (new Date()).toUTCString();

const sasToken = await Storage.GenerateSasTokenIfExpired();

const endpoint = `https://${storageAccountName}.blob.core.windows.net/${containerName}/${name}${sasToken}`;

return backOff(() => new Promise((resolve, reject) => {
request.put({
'body': value,
'headers': {
'x-ms-blob-type': 'BlockBlob',
'x-ms-date': date,
'x-ms-version': '2016-05-31',
'Content-Type': 'text/plain',
'Content-Length': value.length
},
'url': endpoint
}, function (err, result) {
if (err) {
return reject(err);
}
if (result.statusCode !== 201) {
return reject(result.body);
}
return resolve(result);
});
}), AzureBackOff.retryPolicy);

最佳答案

你的怀疑是正确的。基本上,问题的出现是因为字符串的 value.length 包含特殊字符 (ø)。

当我运行以下代码时:

const value = '{"username":"Jøhn"}';
console.log(value);
console.log('value.length', value.length);//Prints 19
const buffer = Buffer.from(value);
console.log('buffer length', buffer.length);//Prints 20

由于内容长度传递为 19,因此发送的字符少了一个,这就是您看到此问题的原因。

请更改以下代码行:

'Content-Length': value.length

'Content-Length': Buffer.from(value).length

这应该可以解决问题。

关于node.js - 使用 REST API 将 json 保存在 azurestorage blob 中时,json 中缺少大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62079318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com