NodeJS 除了使用磁盘存储外,我在Express JS项目上使用什么来上传视频?目前我使用Multer,它存储在我的EC2 DS中

bksxznpy  于 2023-01-30  发布在  Node.js
关注(0)|答案(1)|浏览(158)

除了使用磁盘存储,我在Express JS项目上使用什么进行视频上传?目前我正在使用multer,它存储在我的EC2磁盘中,但我认为我应该使用一些aws云,什么样的aws云最适合生产级别,以及如何使用multer实现到我的项目中,并通过使用Express查看。静态
我想知道我如何实现任何aws存储设施到我的项目,除了使用aws EC2磁盘存储,因为会有很多大的视频上传在我的项目,1 TB也是非常少的存储为我的项目。

bf1o4zei

bf1o4zei1#

您需要创建一个AWS S3 Bucket,获取您的凭据,然后创建一个上传服务,如下所示:
(始终记住桶对象和端点的权限)

import aws from 'aws-sdk'
import { ManagedUpload } from 'aws-sdk/clients/s3'
import { FileArray, UploadedFile } from 'express-fileupload'
import { flatten } from 'ramda'

type ResponseUpload = {
    uploaded: any[]
    error: boolean
}

export const UploadService = () => {
    aws.config.update({
        secretAccessKey: '<YOUR_SECRET_ACCESS_HERE>',
        accessKeyId: '<YOUR_ACCESS_KEY_ID_HERE>',
        region: '<REGION_OF_YOUR_BUCKET>'
    })
    const s3 = new aws.S3()
    const upload = async (requestFiles: FileArray): Promise<ResponseUpload> => {
        const files: UploadedFile | UploadedFile[] = flatten([requestFiles.files])

        const responseUpload: ResponseUpload = {
            uploaded: [],
            error: false
        }

        for (const file of files) {
            if (!responseUpload.error) {
                try {
                    const uploadedFile = await uploadS3(file)
                    responseUpload.uploaded = [...responseUpload.uploaded, { ...uploadedFile, ...file }]
                } catch (err) {
                    responseUpload.error = true
                }
            }
        }

        return responseUpload
    }

    return { upload }
}

相关问题