返回
OSS直通车:Nestjs+Vue轻松实现阿里云OSS服务端签名直传
前端
2023-07-15 02:04:49
阿里云 OSS 服务端签名直传:安全且便捷的文件上传指南
文件上传 是软件开发中至关重要的环节,而选择合适的云存储服务至关重要。阿里云 OSS 作为国内领先的云计算提供商,深受广大开发者的青睐。
服务端签名直传 是 OSS 提供的一种安全且便捷的文件上传方案,它允许用户直接将文件上传到 OSS,而无需暴露 OSS 的访问密钥。这种方式既保障了文件的安全,又简化了用户的文件上传流程。
服务端签名直传的工作原理
服务端签名直传的工作原理如下:
- 服务器端生成上传凭证: 服务器使用阿里云 OSS SDK 生成一个包含上传策略和签名的上传凭证。
- 返回上传凭证给客户端: 服务器将上传凭证返回给客户端,通常是通过 HTTP 请求或 WebSocket 等方式。
- 客户端使用上传凭证上传文件: 客户端使用上传凭证通过 HTTP POST 请求将文件上传到指定的 OSS Bucket 中。
生成上传凭证
在 Nestjs 项目中,可以使用 @nestjs/oss
库生成上传凭证:
import { Injectable } from '@nestjs/common';
import { OssService } from '@nestjs/oss';
@Injectable()
export class AppService {
constructor(private readonly ossService: OssService) {}
async generatePresignedUrl(fileName: string): Promise<string> {
const policy = {
expiration: '2023-01-01T12:00:00.000Z',
conditions: [
{ bucket: 'my-bucket' },
{ key: fileName },
],
};
const url = await this.ossService.generatePresignedUrl('putObject', policy);
return url;
}
}
使用上传凭证上传文件
在 Vue 项目中,可以使用 vue-oss-uploader
库上传文件:
import Vue from 'vue';
import VueOssUploader from 'vue-oss-uploader';
Vue.use(VueOssUploader, {
region: 'oss-cn-beijing',
accessKeyId: 'my-access-key-id',
accessKeySecret: 'my-access-key-secret',
bucket: 'my-bucket',
});
export default {
methods: {
uploadFile(file) {
const uploader = new VueOssUploader();
uploader.addFile(file);
uploader.start();
},
},
};
常见问题解答
1. 如何确保上传凭证的安全性?
上传凭证的安全性由两个因素决定:
- 服务器端密钥的安全性:服务器端密钥应妥善保管,仅限于授权人员访问。
- 凭证的有效期:上传凭证应设置合理的有效期,以防止未经授权的访问。
2. 服务端签名直传是否支持断点续传?
是的,服务端签名直传支持断点续传,当上传中断时,可以通过重新生成上传凭证并使用相同的上传策略继续上传。
3. 上传凭证是否可以复用?
不能,上传凭证只能用于单次上传,使用后即失效。
4. 上传凭证是否支持大文件上传?
是的,服务端签名直传支持大文件上传,具体限制取决于 OSS Bucket 的设置。
5. 服务端签名直传的优点有哪些?
- 安全性: 无需暴露 OSS 访问密钥,提高了文件的安全性。
- 便捷性: 用户无需直接操作 OSS,简化了文件上传流程。
- 可控性: 服务器端控制上传凭证的生成和有效期,便于管理和监控。