Фигурная скобка отсутствует в json, при сохранении json в BLOB-объекте azurestorage с использованием rest api - PullRequest
2 голосов
/ 29 мая 2020

Я попытался сохранить json, в котором есть следующее json со специальным символом «ø».

json - это {"username": "Jøhn"}.

Я использовал этот API, чтобы сохранить json в azure blob ==> https://${storageAccountName}.blob.core.windows.net/${containerName}/${name}${sasToken}

json, сохраненный в контейнере blob, - {"username": "Jøhn" (ПОСЛЕДНИЙ CURLY BRACE ОТСУТСТВУЕТ).

Заголовки, используемые в rest api: 'x-ms-blob-type': 'BlockBlob', 'x-ms-date': date, 'x-ms -version ':' 2016-05-31 ',' Content-Type ':' text / plain ',' Content-Length ': 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);

1 Ответ

0 голосов
/ 29 мая 2020

Ваше подозрение верно. В основном проблема возникает из-за 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

, и это должно решить проблему.

...