nodejs结合七牛云上传文件

后台配置文件

创建文件utils/qiniu.js

安装依赖包

npm i qiniu

ini 复制代码
// 七牛云配置文件
const qiniu = require('qiniu');
 
// 创建上传凭证(accessKey 和 secretKey在七牛云个人中心中有,blog 是七牛云创建的空间名称)
const accessKey = 'ak密钥'; // ak密钥
const secretKey = 'sk密钥'; // 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

php 复制代码
// 前端获取到七牛云返回的token
const express = require('express');
//  定义路由级中间件
const router = express.Router();
const {uploadToken} = require('../utils/qiniu')
 
router.get('/getQiniuToken', (req, res) => {
  res.json({
    code: 200,
    data: {
        token:uploadToken,
    },
    messages: '获取成功'
  });
});
 
module.exports = router;

七牛云上传文件前端代码

安装依赖包

npm i qiniu-js@3.4.2

七牛云ip地址获取

  • 七牛云控制台 -空间管理 - 外链域名

七牛云上传方法

qiniu.upload(file: File, key: string, token: string, putExtra?: object, config?: object): observable

  • file : File 对象,上传的文件
  • key : 文件资源名,为空字符串时则文件资源名也为空,为 null 或者 undefined 时则自动使用文件的 hash 作为文件名
  • token: 上传验证信息,前端通过接口请求后端获得
  • config : object,其中的每一项都为可选
  • putExtra : object,其中的每一项都为可选

qiniu.region: object

  • qiniu.region.z0: 代表华东区域
  • qiniu.region.z1: 代表华北区域
  • qiniu.region.z2: 代表华南区域
  • qiniu.region.na0: 代表北美区域
  • qiniu.region.as0: 代表新加坡区域
ini 复制代码
//前端代码
import * as qiniu from "qiniu-js";
​
const qiniuToken = ref("");
const config = {
  useCdnDomain: true,
  region: qiniu.region.z2
};
​
const putExtra = {
    //...
};
​
const observer = {
  next(res) {},
  error(err) {},
  complete(res) {
    //获取开发环境地址(七牛云ip地址)
    const url = `http://XXX.com/${res.key}`;
    console.log('完整图片访问地址',url)
  }
};
​
//选择文件上传
const onChange = async (fileList) => {
  if (fileList && fileList.length) {
   //获取七牛云token
    const { data } = await getQiniuToken();
    qiniuToken.value = data.token;
    const file = fileList[0];
    const key = `${dayjs().format("YYYYMMDDHHmmss")}_${file.name}`;
    const observable = qiniu.upload(
      file,
      key,
      qiniuToken.value,
      putExtra,
      config
    );
    const subscription = observable.subscribe(observer);
    // subscription.unsubscribe(); // 上传取消
  }
}}
​
相关推荐
白中白121386 分钟前
Vue系列-2
前端·javascript·vue.js
BYSJMG15 分钟前
计算机毕设选题推荐:基于Hadoop的交通事故数据可视化分析系统
大数据·vue.js·hadoop·分布式·后端·信息可视化·课程设计
jin42135217 分钟前
React Native鸿蒙跨平台完成闪屏页作为移动应用的入口级页面,实现的二手置换应用闪屏页SecondhandSplash
javascript·react native·react.js·ecmascript·harmonyos
CHU72903518 分钟前
一番赏盲盒小程序前端功能:层级乐趣与便捷服务的双向赋能
前端·小程序
共享家95271 小时前
基于 Coze 工作流搭建历史主题图片生成器
前端·人工智能·js
zhaoyin19941 小时前
fiddler抓包工具使用
前端·测试工具·fiddler
微祎_1 小时前
Flutter for OpenHarmony:构建一个 Flutter 单词拼图游戏,深入解析状态驱动 UI、交互式字母操作与教育类应用设计
javascript·flutter·ui
摘星编程1 小时前
用React Native开发OpenHarmony应用:ProgressBar缓冲进度显示
javascript·react native·react.js
人机与认知实验室1 小时前
<span class=“js_title_inner“>如何看待特斯拉第三代Optimus机器人?</span>
开发语言·javascript·机器人·ecmascript·unix
Doris8931 小时前
【 Vue】 Vue3全面讲解文档
前端·javascript·vue.js