使用React上传图片和视频到S3服务器

699 阅读1分钟
  1. 安装AWS SDK
npm install aws-sdk

2.需要配置AWS凭证,以便可以访问S3服务(一般后端配置)

const bucketName = 'Your bucket name';
const region = 'Your bucket region';
const accessKeyId = 'Your accessKeyId';
const secretAccessKey = 'Your secretAccessKey';
const s3 = new AWS.S3({
  accessKeyId,
  secretAccessKey,
  region
});

3.上传处理

const { selectedFile } = this.state;
const contentType = selectedFile.type;
const params = {
  Bucket: bucketName,
  Key: 'video/' + 文件名, //上传的目录
  Body: selectedFile, // 文件对象
  ContentType: contentType, // 文件类型
  ACL: 'public-read'
}
s3.upload(params, (err, data) => { 
    if (err) { 
        console.error(err); 
    } else { 
        console.log('File uploaded successfully:', data.Location); 
    } 
 });

【上传配置】

Bucket:指定要上传到的S3存储桶的名称。
Key:指定上传文件在S3存储桶中的目标路径。
Body:指定要上传的文件内容。
ACL:指定上传文件的访问权限。常见的值包括private(私有)、public-read(公共读取)和public-read-write(公共读写)。
ContentType:指定上传文件的内容类型。
ContentDisposition:指定上传文件的内容描述。
ContentEncoding:指定上传文件的内容编码。
ContentLength:指定上传文件的内容长度。
CacheControl:指定上传文件的缓存控制。
Metadata:指定上传文件的元数据。

注意:此方法存在安全性问题,会暴露ak/sk,建议改成:

后端去aws生成一个有时间限制的签名aws域名的url  
前端通过这个url直接上传aws

这样,ak/sk还是存储在后端,没有被前端暴露的风险