首页 > 编程语言 >七牛云上传文件Node

七牛云上传文件Node

时间:2024-06-12 14:37:30浏览次数:20  
标签:Node 七牛云 err modifiedKey qiniu new 上传 const

const qiniu = require('qiniu');
const fs = require('fs');
const path = require('path');

// 七牛云配置
const accessKey = 'accessKey';
const secretKey = 'secretKey-fNH9FejVul';

const bucket = 'bucket'; // 七牛云存储空间名
const filePath = './images' // 本地上传文件夹

const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
const config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z1; // 选择对应的存储区域
const formUploader = new qiniu.form_up.FormUploader(config);

// 缓存刷新
const cdnManager = new qiniu.cdn.CdnManager(mac);

// 生成上传 Token
function uploadToken(bucket, key) {
const putPolicy = new qiniu.rs.PutPolicy({ scope: ${bucket}:${key} });
return putPolicy.uploadToken(mac);
}

// 刷新缓存
function refreshFileCache(urls) {
return new Promise((resolve, reject) => {
// 提交刷新任务
cdnManager.refreshUrls(urls, (err, respBody, respInfo) => {
if (err) {
reject(err);
return;
}
if (respInfo.statusCode === 200) {
resolve(respBody);
} else {
reject(new Error(刷新失败: ${respInfo.statusCode}));
}
});
});
}
// 上传单个文件到七牛云
function uploadFile(localFile, key) {
// 将文件的键(key)中的 = 替换为 =?
const modifiedKey = key
// const modifiedKey = key.split('=')[0] + '=' // 为了解决本地的文件名称存在?参数的问题,实际显示没有后续的一些参数
console.log("本地文件名称",localFile);
console.log("上传文件名称",modifiedKey);
// "MTcwMDA0NTA2NTczNzkyOTQ1NS5wbmc=?1700045065868.jpeg".split('=')[0] + '='
// 将 filename 属性设置为修改后的文件名 modifiedKey

// 上传重命名
let putExtra = new qiniu.form_up.PutExtra(modifiedKey);
putExtra.fname = modifiedKey;

return new Promise((resolve, reject) => {
    const token = uploadToken(bucket, modifiedKey);
    formUploader.putFile(token, modifiedKey, localFile, putExtra, async (err, body, info) => {
        if (err) {
            reject(err);
            return;
        }
        if (info.statusCode === 200) {
            // 上传成功后刷新缓存
            await refreshFileCache([modifiedKey]);
            resolve(body);
        } else {
            reject(new Error(`上传失败: ${info.statusCode}`));
        }
    });
});

}

// 读取并上传images目录下的所有文件
async function uploadImagesSequentially() {
try {
const files = fs.readdirSync(filePath);
for (const file of files) {
console.log(开始上传文件: ${file});
await uploadFile(${filePath}/${file}, file);
console.log(https://cdn.hxdsmy.com/${file} 上传成功);
}
console.log('所有文件上传完毕');
} catch (err) {
console.error('上传过程中出错:', err);
}
}

// 启动上传流程
uploadImagesSequentially();

标签:Node,七牛云,err,modifiedKey,qiniu,new,上传,const
From: https://www.cnblogs.com/brujie/p/18243876

相关文章

  • 限速上传文件到腾讯对象存储cos的脚本
     官网:https://cloud.tencent.com/document/product/436/12269 安装包,这里用的python2.7#pipinstall-Ucos-python-sdk-v5-ihttps://mirrors.tencent.com/pypi/simple/  脚本:vimmcw.py#-*-coding=utf-8fromqcloud_cosimportCosConfigfromqcloud_cosimp......
  • 计算机毕业设计项目推荐,32127 爬虫-自驾游搜索系统(开题答辩+程序定制+全套文案 )上万套
    目 录摘要1绪论1.1研究背景1.2爬虫技术1.3flask框架介绍21.4论文结构与章节安排32 自驾游搜索系统分析42.1可行性分析42.2系统流程分析42.2.1数据增加流程52.3.2数据修改流程52.3.3数据删除流程52.3系统功能分析52.3.1功能性分析62.......
  • 计算机毕业设计项目推荐,32006 node 中国传统节日介绍网站(开题答辩+程序定制+全套文案
    基于node.js中国传统节日介绍网站 摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,中国传统节日介绍网站当然也不能排除在外。中国传统节日介绍网站是以实际运用为开发背景,运用软件工程原理和开发方法,采......
  • 计算机毕业设计项目推荐,29042 基于Web的医院护理管理系统的设计(开题答辩+程序定制+全
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,医院当然也不例外。医院预约管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统进......
  • 基于Vue+Node.js的高校学业预警系统+10551(免费领源码)可做计算机毕业设计JAVA、PHP、爬
    NodeJS高校学业预警系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,教育行业当然也不能排除在外。高校学业预警系统是以实际运用为开发背景,运用软件工程开发方法,采用Node.JS技术构建的一个管理系统。......
  • 【镜像制作】node.js+pm2的latest版镜像制作
    文章目录简介dockerfile代码简介本司的一些nodejs环境基本都运行在pm2的环境下,pm2是一个node环境下的多进程管理工具,通过pm2可以提升不少性能,管理起来也比较方便。在制作nodejs+pm2镜像时,建议指定版本进行安装,这样可以避免时间一久出现版本上不兼容的问题。dock......
  • git 教程:如何从github上拉取项目 · 进行修改并上传到自己仓库 · 一个仓库保存,多端同
    一:删除原始的远程仓库链接首先,查看当前的远程仓库链接:gitremote-v你会看到类似如下的输出:originhttps://github.com/othersusername/others-project.git(fetch)originhttps://github.com/othersusername/others-project.git(push)删除原始远程仓库链接:git......
  • PHP文件上传接口
    文件上传接口上传在项目/runtime/storage/下,返回的是相对路径./***文件上传接口*paramfile:/2024-06-11_09-50-43.png*return*{*"status":1,*"msg":"上传成功",*"data":{*"file_pa......
  • SpringBoot Minio 分片上传
    1、简介分片上传通常被用于各种需要处理大文件的场景,如视频平台、云存储服务等。它不仅可以加速文件上传过程,还可以提高系统的稳定性和容错性。简单来说就是:1)把大文件分割成多个小文件(比如每个5MB)2)逐个/并发上传小文件3)所有小文件都上传完后,将所有小文件合并成大文件2、主流上......
  • k8s-CCE使用node节点使用VIP--hostNetwork&hostPort
    CCE使用node节点使用VIP背景:想在节点上使用VIP,将nodeport服务做到高可用。启动VIP后发现访问失败部署!ConfigurationFileforkeepalivedglobal_defs{router_idmaster-node}vrrp_instanceVI_1{stateBACKUPinterfaceeth0mcast_src_ip10.1......