简介
@kopjra/mongoose-crate-s3
是一款 Node.js 模块,它提供了将文件存储到 Amazon S3 服务的功能。在使用 @kopjra/mongoose-crate-s3
时,我们可以通过二进制流的方式将文件上传至 S3 服务,并且可以在 mongoose 模型中轻松配置以保存文件的 URL 等信息。
安装
本模块依赖于 mongoose 和 aws-sdk ,在安装之前需要先确保这两个模块已经被安装在你的项目中。
执行下面的命令即可:
npm install @kopjra/mongoose-crate-s3 mongoose aws-sdk
使用
配置
首先需要在 mongoose
上使用插件的方式引入 @kopjra/mongoose-crate-s3
:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- --------------- - ------------------------------------- -------------------------------- - -------- - --- - ------------ ------------------ ---------------- -------------------------- ------- ----------- ------- ---------- - - ---
其中:
accessKeyId
和secretAccessKey
是访问 S3 服务的 IAM 用户的凭证信息。region
和bucket
是 S3 服务的区域和存储桶名称。
定义模型
考虑到需要在模型中存储文件的 URL,我们需要在模型中定义相应的字段,同时我们需要在 schema 上使用 file
字段:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- - ------ - - --------- ----- - -------------- - - ------------------------------------- ----- ---------- - --- -------- ---- - ----- ------- --------- ---- -- --------- ------- --------- ------- ----- ------- ---------- ----- ---------- ---- --- ----- -------- - --- -------- -------- ------- ----- --------------- ------ ----------------- --- --- --------------------------------------- - ------- ------ --- ----- ------- - ------------------------- ----------
在上面的代码中:
file
和files
字段都是使用了FileAttributes
来声明,它们分别表示单个文件和多个文件的属性信息。mySchema.plugin
传入两个参数:插件和配置,其中配置对象的myFile
字段指定文件的属性名。
API
上面的配置完成之后,我们就可以在模型中使用 @kopjra/mongoose-crate-s3
提供的 API 了。
file.createReadStream(): ReadableStream
返回一个用于读取文件二进制流的 ReadableStream
。
file.openReadStream(): Promise
打开一个用于读取文件二进制流的 ReadableStream
。
file.uploadStream(): WritableStream
返回一个用于上传文件的 WritableStream
。
file.openUploadStream(): Promise
打开一个用于上传文件的 WritableStream
。
saveFile(file: Buffer | string, options: Object = {}): Promise<FileDocument>
保存一个文件。
在使用 saveFile
方法时,只需要将文件的二进制数据或文件路径传入即可,方法会自动判断参数类型并执行相应的操作。
同时,options
参数用于控制保存文件的一些附加信息,它的属性如下:
filename
:指定文件名称。mimetype
:指定文件 MIME 类型。expires
:指定文件过期时间。
removeFile(options: Object = {}): Promise<FileDocument>
删除一个文件。
在使用 removeFile
方法时,可以通过 options
参数来获取相关的附加信息,比如文件名称等。
代码示例
保存文件
-- -------------------- ---- ------- ----- ------- - ----------------------------- ----- -- - -------------- ----- ----- - -------------------------------------- ----------------------- - --------- ------------ --------- ------------ ----------------- -- - --------------------- -------------- -- - ------------------- ---
读取文件
const myModel = require('./models/my-model'); myModel.findOne({ _id: '5f717534600e551d48e135ba' }).then((doc) => { const stream = doc.file.createReadStream(); // 处理二进制流 }).catch((err) => { console.error(err); });
总结
在本文中,我们详细介绍了 @kopjra/mongoose-crate-s3
的使用,包括配置、模型定义、API 和代码示例等内容,希望本文能为读者提供一些指导意义,帮助大家更好地使用该模块。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600671c530d09270238227b7