nodejs开发后端 接收前端传入的formdata文件并保存

 将文件保存在后端项目本地

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);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值