загрузка того же файла в Azure хранилище BLOB-объектов без перезаписи? - PullRequest
1 голос
/ 16 апреля 2020

Я использую Azure Хранилище JavaScript Клиентская библиотека для загрузки файла в azure хранилище, перейдя по этой ссылке https://dmrelease.blob.core.windows.net/azurestoragejssample/samples/sample-blob.html

Ниже приведен код моего фрагмента загрузки в azure хранилище (которое берет файл и сохраняет его в хранилище)

var speedSummary = blobService.createBlockBlobFromBrowserFile('mycontainer', file.name, file, {blockSize : customBlockSize}, function(error, result, response) {
    finishedOrError = true;
    if (error) {
        // Upload blob failed
    } else {
        // Upload successfully
    }
});

Основная проблема - когда я снова загружаю тот же файл. Это переписывает файл. Есть ли какое-либо свойство или заголовок, который можно добавить, чтобы предотвратить перезапись. Я хочу, чтобы дубликаты файлов также сохранялись без перезаписи

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.

1 Ответ

1 голос
/ 16 апреля 2020

Можно ли добавить какое-либо свойство или заголовок, чтобы предотвратить перезапись.

Абсолютно. Вы можете указать EtagNonMatch условие доступа с * в качестве значения. Из документации link:

Если ETag для BLOB-объекта не совпадает с указанным ETag. Укажите подстановочный знак (*) для выполнения операции, только если ресурс не существует, и не выполните операцию, если она существует.

Это приведет к сбою загрузки большого двоичного объекта в случае, если блоб с таким же именем существует. Условия доступа можно указать в параметре accessConditions.

Подробнее о поддержке условных заголовков в хранилище BLOB-объектов можно узнать здесь: https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations.

Я хочу, чтобы дубликаты файлов также сохранялись без перезаписи

Это то, что вам нужно обрабатывать самостоятельно. Если загрузка BLOB-объекта не удалась, поскольку BLOB-объект уже существует, вы получите ошибку Pre Condition Failed (HTTP Status Code 412). Исходя из этой ошибки, вам нужно будет придумать новое имя для большого двоичного объекта и загрузить его снова.

ОБНОВЛЕНИЕ

Вот код (не тестировался), что вы можете использовать:

var options = {
  blockSize : customBlockSize,
  accessConditions: {
    EtagNonMatch: '*'
  }
};
var speedSummary = blobService.createBlockBlobFromBrowserFile('mycontainer', file.name, file, options, function(error, result, response) {
    finishedOrError = true;
    if (error) {
        // Upload blob failed
    } else {
        // Upload successfully
    }
});
...