#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. спасибо за ваш ответ и рад узнать, что вы решили свою проблему. Итак, если это может быть другим способом решения вашей проблемы, не могли бы вы отметить его как ответ, чтобы он помог другим?