Skip to content

Instantly share code, notes, and snippets.

@troyz
Last active May 31, 2018 06:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save troyz/7a334f369005d4d36c6e1e50151ca68b to your computer and use it in GitHub Desktop.
Save troyz/7a334f369005d4d36c6e1e50151ca68b to your computer and use it in GitHub Desktop.
上传本地图片至七牛云服务器
/**
* 将微信小程序(wepy)源代码目录:src/assets/images 下的所有图片上传到七牛云服务器,
* 请修改参数:
* 七牛云参数:accessKey,secretKey,bucket
* 工程目录参数:imageFolderPath,projectQiNiuFolder
* 七牛云文档:https://developer.qiniu.com/kodo/sdk/1289/nodejs
*/
let qiniu = require("qiniu");
let fs = require("fs");
let path = require("path");
// 本地将要上传的图片文件夹路径 src/assets/images
let imageFolderPath = path.join('src', 'assets', 'images');
// `imageFolderPath` 保存到七牛云之后对应的目录,图片访问路径样例:http://******.clouddn.com/mp-travel/assets/images/eye.png
let projectQiNiuFolder = 'mp-travel/assets/images';
let accessKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
let secretKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
let bucket = 'xxxxxxxxxxxx';
//需要填写你的 Access Key 和 Secret Key
qiniu.conf.ACCESS_KEY = accessKey;
qiniu.conf.SECRET_KEY = secretKey;
var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
//构建上传策略函数
function uptoken(bucket, key)
{
var putPolicy = new qiniu.rs.PutPolicy({
scope: bucket + ':' + key,
});
return putPolicy.uploadToken(mac);
}
var config = new qiniu.conf.Config();
// 空间对应的机房
config.zone = qiniu.zone.Zone_z0;
var formUploader = new qiniu.form_up.FormUploader(config);
var putExtra = new qiniu.form_up.PutExtra();
// 文件上传到七牛云
function uploadImage(key, filePath)
{
//生成上传 Token
let token = uptoken(bucket, key);
// 文件上传
formUploader.putFile(token, key, filePath, putExtra, function (respErr, respBody, respInfo) {
if (respErr)
{
throw respErr;
}
if (respInfo.statusCode == 200)
{
console.log(respBody);
}
else
{
console.log('文件上传失败');
console.log(respInfo.statusCode);
console.log(respBody);
}
});
}
// 递归读取图片文件
function recursiveUploadImageFiles(filePath)
{
fs.readdir(filePath, undefined, function(err, files){
if(err)
{
console.log(err);
return;
}
files.forEach(function(filename){
// 获取当前文件的绝对路径
var filedir = path.join(filePath, filename);
// 根据文件路径获取文件信息,返回一个fs.Stats对象
fs.stat(filedir,function(err, stats){
if(err)
{
console.log(err);
return;
}
if(stats.isDirectory())
{
recursiveUploadImageFiles(filedir);
}
else if(stats.isFile())
{
let targetFiledir = filedir.replace(imageFolderPath, projectQiNiuFolder).replace(/\\/g, '/');
// console.log(`${filedir} -> ${targetFiledir}`);
uploadImage(targetFiledir, filedir);
}
});
});
});
}
recursiveUploadImageFiles(imageFolderPath);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment