企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# **将文件保存在后端项目本地** eg. 将头像文件保存到本地 `public/uploads/avatar` 文件夹下 ## **插件 `multer`** ## **安装并使用** #### **安装** ``` npm install multer --save ``` #### **引用** ``` const multer = require("multer"); const upload = multer({ dest: "public/uploads/avatar/" });// 项目重启之后会在指定dest指定的路径下创建对应的文件夹 ``` #### **自定义文件存储名称** ``` const storage = multer.diskStorage({ destination: 'uploads/', // 文件存储路径 filename: (req, file, cb) => { // 重命名文件函数 // 生成带有.jpg后缀的文件名 const fileName = file.fieldname + '-' + Date.now() + '.jpg'; cb(null, fileName); } }); ``` #### **使用** ``` // 示例 router.post( "/admin/user/update", // 前端调用上传时的接口地址 upload.single("file"), // 前端负载中的formdata中的文件二进制对应的key UserController.updateUserInfo ); // 更新用户信息 ``` #### **controller 中获取到保存的file信息** ``` updateUserInfo: async (req, res) => { ... // 通过 req.file 获取到file信息 /* { fieldname: 'file', // 字段 originalname: 'bg_userportrait.png', // 文件原始名称 encoding: '7bit', // 编码 mimetype: 'image/png', // 文件类型 destination: 'public/uploads/avatar/', // 文件存储文件夹路径 filename: '23a778bd9d379ca6987cf8890351cf1f', // 存储后的文件名 path: 'public\\uploads\\avatar\\23a778bd9d379ca6987cf8890351cf1f',// 文件存储完整地址 size: 43067 // 文件大小 } */ ... } ``` # **实现文件上传到七牛云** ## **安装依赖** ``` npm/cnpm install qiniu ``` or ``` yarn add qiniu ``` ## **导出七牛云配置文件的Token** ``` // 七牛云配置文件 const qiniu = require('qiniu'); // 创建上传凭证(accessKey 和 secretKey在七牛云个人中心中有,blog 是七牛云创建的空间名称) const accessKey = 'xxxxxxx'; // ak密钥 const secretKey = 'xxxx'; // sk密钥 const mac = new qiniu.auth.digest.Mac(accessKey, secretKey); const options = { scope: 'blog' // 存储空间的名字 }; const putPolicy = new qiniu.rs.PutPolicy(options); const uploadToken = putPolicy.uploadToken(mac); module.exports = { uploadToken // 导出的是七牛云生成的token }; ``` ## **提供接口给前端使用** ``` // 前端获取到七牛云返回的token const express = require('express'); // 定义路由级中间件 const router = express.Router(); const uploadToken = require('./qiniu') router.get('/getQiniuToken', (req, res) => { res.json({ code: 200, data: uploadToken.uploadToken, messages: '获取成功' }); }); module.exports = router; ``` # **实现文件上传到MinIO** ## **安装依赖** ``` npm install minio --save ``` ## **引用依赖** ``` const Minio = require('minio'); ``` ## **配置minio** ``` const minioClient = new Minio.Client({ endPoint: 'minio.example.com', port: 9000, useSSL: true, accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY', }); ``` ## **实现接口** ``` app.post('/upload', (req, res) => { if (!req.files) { res.status(400).send('No file uploaded'); } else { const file = req.files.file; const metaData = { 'Content-Type': file.mimetype, }; const stream = Buffer.from(file.data, 'binary'); minioClient.putObject( 'my-bucket', file.name, stream, stream.length, metaData, (err, etag) => { if (err) return console.log(err); console.log(etag); res.status(200).send('File uploaded'); }, ); } }); ``` # **实现本地批量上传文件到AliYunOSS** ## **安装依赖** ``` npm install ali-oss --save ``` ## **使用** #### **创建oss.js** ``` const OSS = require('ali-oss'); async function uploadFileToOSS(file) { // 配置你的OSS信息 const client = new OSS({ region: '<Your region>', accessKeyId: '<Your accessKeyId>', accessKeySecret: '<Your accessKeySecret>', bucket: '<Your bucket name>', }); // 假设file是一个包含文件信息的对象,例如从Express.js的req.file获取 // file.name是文件名,file.path是文件的本地路径 try { const result = await client.put(file.name, file.path); console.log('File uploaded to OSS:', result); return result; } catch (e) { console.error('Error uploading file to OSS:', e); return e; } } ``` #### **使用示例** ``` // 假设file是你前端传来的文件对象,它可能包含name和path属性 uploadFileToOSS(file).then(result => { console.log('上传结果:', result); }).catch(error => { console.error('上传失败:', error); }); ```