Хранилище BLOB-объектов Azure выдает «запрос был прерван» почти для всех моих запросов PUT - PullRequest
2 голосов
/ 27 марта 2019

Я пытаюсь использовать хранилище больших двоичных объектов Azure для хранения больших двоичных объектов, но большую часть времени я получаю ответы "запрос был прерван" из хранилища больших двоичных объектов.Я использую Node.js v10 SDK в Express API, и у меня возникает ощущение, что это связано с тем, как я настраиваю службу.

Я использую Azurite для имитации хранилища Azure.оказание услуг.

В моем app.js я запускаю свою функцию configureBlobStore() при запуске:

export const configureBlobStore = async containerName => {
  const sharedKeyCredential = new SharedKeyCredential(
    process.env.AZURE_STORAGE_ACCOUNT_NAME,
    process.env.AZURE_STORAGE_ACCOUNT_ACCESS_KEY,
  );
  const pipeline = StorageURL.newPipeline(sharedKeyCredential);
  serviceUrl = new ServiceURL('http://blob:10000/devstoreaccount1', pipeline);

  if (!containerUrl) {
    containerUrl = ContainerURL.fromServiceURL(serviceUrl, containerName);
    try {
      await containerUrl.create(aborter);
    } catch (err) {
      console.log(err);
      console.log('Container already existed, skipping creation');
    }
  }
  return containerUrl;
};

и затем, чтобы сохранить капли, я запускаю свою функцию saveToBlobStore()

  let { originalname: blobName } = file;
  const blockBlobUrl = BlockBlobURL.fromContainerURL(containerUrl, blobName);
  const uploadOptions = { bufferSize: 4 * 1024 * 1024, maxBuffers: 20 };
  const stream = intoStream(file.buffer);

  try {
    await uploadStreamToBlockBlob(
      aborter,
      stream,
      blockBlobUrl,
      uploadOptions.bufferSize,
      uploadOptions.maxBuffers,
    );

    return blockBlobUrl.url;
  } catch (err) {
    console.error('Error saving blob', err);
    return err;
  }
};

Иногда это работает, часто когда я снимаю свои контейнеры и выполняю сокращение объема, но обычно это работает только для первого загруженного файла, а не для каких-либо других.Кто-нибудь знает, почему это может происходить?

1 Ответ

5 голосов
/ 27 марта 2019

Обнаружив проблему, я создал Aborter один раз, кэшировал его и использовал его для всех моих вызовов, но вам нужно создать новый перед каждым вызовом хранилища BLOB-объектов.

...