Хранилище BLOB-объектов Azure сжимает файлы по умолчанию?

Я загружаю файлы JSON в хранилище BLOB-объектов Azure с помощью функции API хранилища BLOB-объектов Azure:

    const response = await blobClient.upload(content, content.length);

В коде нет абсолютно никакой логики сжатия и добавления каких-либо заголовков кодирования, но файлы кажутся примерно на 60% от своего первоначального размера, когда они достигают хранилища. Кроме того, при мониторинге запросов PUT с помощью fiddler кажется, что файл сжимается, а затем загружается API.

У меня вопрос: выполняет ли Azure сжатие по умолчанию?

РЕДАКТИРОВАТЬ: я структурировал, а затем загружал объекты json. Они удаляют все пробелы и, следовательно, уменьшают размер.


person izSaad    schedule 30.03.2020    source источник
comment
Я считаю, что по умолчанию используется gzip. Можно ли вместо этого использовать идентификационную кодировку? Я могу попробовать и сделать несколько тестов, если хотите. Дайте мне знать.   -  person LMG    schedule 30.03.2020
comment
Я не верю, что SDK будет сжимать файлы по умолчанию. Вы можете скачать файлы и снова открыть их? Пожалуйста, отредактируйте свой вопрос и включите полный код?   -  person Gaurav Mantri    schedule 31.03.2020


Ответы (2)


Судя по моему тесту, проблем со сжатием нет. Вот мой образец:

const { BlobServiceClient } = require("@azure/storage-blob");
var fs = require('fs');

async function main() {
    const AZURE_STORAGE_CONNECTION_STRING = "Your_Stroage_Account_Connection_String";
    const blobServiceClient = BlobServiceClient.fromConnectionString(AZURE_STORAGE_CONNECTION_STRING);

    const containerName = 'demo';
    const blobName = 'test.txt';

    const containerClient = blobServiceClient.getContainerClient(containerName);
    if(!await containerClient.exists()){
        await containerClient.create();
    }
    const contents = fs.readFileSync('test.txt');
    const blockBlobClient = containerClient.getBlockBlobClient(blobName);
    await blockBlobClient.upload(contents,contents.length);

}

main().then(() => console.log('Done')).catch((ex) => console.log(ex.message));

Размер файла test.txt составляет около 99,9 КБ.

введите здесь описание изображения

И с портала размер загруженного файла составляет 99,96 КБ, что соответствует нашим ожиданиям.

введите здесь описание изображения

person Jack Jia    schedule 31.03.2020
comment
Что ж, спасибо за тестирование. Вы правы, никакого сжатия Azure. Однако я хотел бы спросить, возможно ли это сделать с помощью собственного API хранилища Azure? - person izSaad; 31.03.2020
comment
@DivisionSi Проверил онлайн и проверил документацию SDK, боюсь, что такого метода во встроенном ПО нет. - person Jack Jia; 31.03.2020

Вы также должны использовать длину байта при загрузке, поскольку api большого двоичного объекта хранилища ожидает количество байтов, длина строки может быть другой.

  const content = "Hello 世界!";
  console.log(`length: ${content.length}`);
  console.log(`byteLength: ${Buffer.byteLength(content)}`);

выход:

length: 9
byteLength: 15
person Jeremy Meng    schedule 31.03.2020