typescript - 带有 NestJS 的 Azure 存储 - 使用元数据保存和获取文件
问题描述
我在我的 NestJS 项目中使用 Azure 存储。文件上传工作正常,但我无法成功解决如何使用自定义元上传文件并按名称读取此文件。
如您所见,我originalname
用 uuid 覆盖以确保此文件名保持唯一。我接下来将使用此 uuid 作为保存文件的参考。由于覆盖了原始名称,我丢失了有关真实文件名的信息,我想将其存储为元信息。
async uploadFile(file: UploadedFileMetadata): Promise<void> {
await this.azureStorageService.upload({
...file,
originalname: getUuid(),
})
}
azureStorageService
没有其他有用的方法,你能告诉我如何将文件名保存到元,然后通过保存的uuid读取这个元来下载这个文件吗?谢谢
解决方案
你是对的,我已经查看了 的源代码azureStorageService
,没有其他有用的方法。但幸运的是,它会用 SAS 令牌回复一个storageUrl
,因此我们可以发出另一个 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 + "&comp=metadata",null,{headers:{'x-ms-meta-name':'orginal name here'}})
.subscribe((response) => {
console.log(response.status);
});
{
Logger.log(storageUrl);
}}
}
结果:
推荐阅读
- java - Ajax 调用正常,但表单提交仍在等待
- excel - 输入20个元素为一个
- python - Python:一维和二维数组之间的比较,询问两个数组在哪里有非零条目
- r - 并在 R 中登录 & in shell 命令
- python - 将抓取的 HTML 表转换为 Pandas 数据框
- javascript - 如何将动态生成的代码导入 webworker 以便在调试器中访问
- quarkus - Java 9 是否与休眠 4.3.5.Final 兼容?
- javascript - 如何修复导航栏
- docker - 执行`sudo apt-get update`命令时无法连接到ports.ubuntu.com:80
- python - flask-sqlachemy 外键不适用于模型