Хранилище Azure с NestJS — сохранение и извлечение файла с метаданными

#typescript #azure-storage #azure-blob-storage #nestjs

#typescript #azure-хранилище #azure-blob-хранилище #nestjs

Вопрос:

Я использую хранилище Azure в своем проекте NestJS. Загрузка файлов работает нормально, но я не могу успешно решить, как загружать файлы с пользовательской метой и читать этот файл по имени.

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

 async uploadFile(file: UploadedFileMetadata): Promise<void> {
    await this.azureStorageService.upload({
      ...file,
      originalname: getUuid(),
    })        
}
 

azureStorageService у него нет других полезных методов, можете ли вы сказать мне, как сохранить имя файла в meta, а затем прочитать эту meta по сохраненному uuid для загрузки этого файла? Спасибо

Комментарии:

1. Как дела? Ваша проблема решена?

Ответ №1:

Вы правы, я просмотрел исходный код azureStorageService , других полезных методов нет. Но, к счастью, он ответит a storageUrl с помощью токена SAS, поэтому с его помощью мы могли бы сделать еще один HTTP-запрос для вызова этого REST API для установки метаданных blob. Это мой тестовый код:

   @Post('azure/upload')
  @UseInterceptors(
    AzureStorageFileInterceptor('file', null),
  )
  async UploadedFilesUsingInterceptor(
    @UploadedFile()
    file: UploadedFileMetadata,
    ) {
      file = {
        ...file,
        buffer : Buffer.from('file'),
        originalname: 'somename.txt'
      };
      const storageUrl = await this.azureStorage.upload(file);
      //call rest api to set metadata
      await this.httpService.put(storageUrl   "amp;comp=metadata",null,{headers:{'x-ms-meta-name':'orginal name here'}})
      .subscribe((response) => {
        console.log(response.status);
      });
   {
    Logger.log(storageUrl);
  }}
}
 

Результат:

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

Комментарии:

1. спасибо, я решаю это с помощью таблицы db, в которую я помещаю свой файл metada, но выглядит также красиво

2. @DenisStephanov. спасибо за ваш ответ и рад узнать, что вы решили свою проблему. Итак, если это может быть другим способом решения вашей проблемы, не могли бы вы отметить его как ответ, чтобы он помог другим?