开始
安装一下七牛云的 SDK
npm install qiniu
然后 copy 一下官方案例代码
var qiniu = require("qiniu");
//需要填写你的 Access Key 和 Secret Key
qiniu.conf.ACCESS_KEY = 'Access_Key';
qiniu.conf.SECRET_KEY = 'Secret_Key';
//要上传的空间
bucket = 'Bucket_Name';
//上传到七牛后保存的文件名
key = 'my-nodejs-logo.png';
//构建上传策略函数
function uptoken(bucket, key) {
var putPolicy = new qiniu.rs.PutPolicy(bucket+":"+key);
return putPolicy.token();
}
//生成上传 Token
token = uptoken(bucket, key);
//要上传文件的本地路径
filePath = './ruby-logo.png'
//构造上传函数
function uploadFile(uptoken, key, localFile) {
var extra = new qiniu.io.PutExtra();
qiniu.io.putFile(uptoken, key, localFile, extra, function(err, ret) {
if(!err) {
// 上传成功, 处理返回值
console.log(ret.hash, ret.key, ret.persistentId);
} else {
// 上传失败, 处理返回代码
console.log(err);
}
});
}
//调用uploadFile上传
uploadFile(token, key, filePath);
首先,你会遇到第一个错误
Error: invalid putpolicy options
看下源码是这样的
// 上传策略
// @link https://developer.qiniu.com/kodo/manual/1206/put-policy
function PutPolicy(options) {
if (typeof options !== 'object') {
throw new Error('invalid putpolicy options');
}
this.scope = options.scope || null;
this.isPrefixalScope = options.isPrefixalScope || null;
this.expires = options.expires || 3600;
this.insertOnly = options.insertOnly || null;
this.saveKey = options.saveKey || null;
this.endUser = options.endUser || null;
this.returnUrl = options.returnUrl || null;
this.returnBody = options.returnBody || null;
this.callbackUrl = options.callbackUrl || null;
this.callbackHost = options.callbackHost || null;
this.callbackBody = options.callbackBody || null;
this.callbackBodyType = options.callbackBodyType || null;
this.callbackFetchKey = options.callbackFetchKey || null;
this.persistentOps = options.persistentOps || null;
this.persistentNotifyUrl = options.persistentNotifyUrl || null;
this.persistentPipeline = options.persistentPipeline || null;
this.fsizeLimit = options.fsizeLimit || null;
this.fsizeMin = options.fsizeMin || null;
this.mimeLimit = options.mimeLimit || null;
this.detectMime = options.detectMime || null;
this.deleteAfterDays = options.deleteAfterDays || null;
this.fileType = options.fileType || null;
}
哦,原来要传入的是一个对象
//构建上传策略函数
function uptoken(bucket, key) {
var putPolicy = new qiniu.rs.PutPolicy(bucket+":"+key);
return putPolicy.token();
}
将以上代码修改为:
//构建上传策略函数
function uptoken(bucket, key) {
var putPolicy = new qiniu.rs.PutPolicy({scope:bucket+":"+key});
return putPolicy.token();
}
是不是感觉 ok了,可以用了,其实还是错了
var extra = new qiniu.io.PutExtra();
这句代码会告诉你 PutExtra 函数不存在 ,哇偶 ,我去看了一下源码
var libPath = process.env.QINIU_COV ? './lib-cov' : './qiniu';
module.exports = {
auth: {
digest: require(libPath + '/auth' + '/digest.js')
},
cdn: require(libPath + '/cdn.js'),
form_up: require(libPath + '/storage/form.js'),
resume_up: require(libPath + '/storage/resume.js'),
rs: require(libPath + '/storage/rs.js'),
fop: require(libPath + '/fop.js'),
conf: require(libPath + '/conf.js'),
rpc: require(libPath + '/rpc.js'),
util: require(libPath + '/util.js'),
zone: require(libPath + '/zone.js'),
app: require(libPath + '/rtc/app.js'),
room: require(libPath + '/rtc/room.js'),
Credentials: require(libPath + '/rtc/credentials.js')
};
根本没有 io.js 嘛,这时候发现 node_modules 中有 example (感觉看到了希望!!!)
原来是这样写的:
var putExtra = new qiniu.form_up.PutExtra();
略略略,藏的这么深
这样也还没完,关于 qiniu.io 的部分都要改,整理一下是这样的:
var config = new qiniu.conf.Config();
var formUploader = new qiniu.form_up.FormUploader(config);
//file
formUploader.putFile(uploadToken, null, localFile, putExtra, function(respErr,
respBody, respInfo) {
if (respErr) {
throw respErr;
}
if (respInfo.statusCode == 200) {
console.log(respBody);
} else {
console.log(respInfo.statusCode);
console.log(respBody);
}
});
好了,上面是爬坑过程,我整理了一下官方案例,代码如下:
const qiniu_sdk = require('qiniu')
const { qiniu } = require('../../../config/')
qiniu_sdk.conf.ACCESS_KEY = qiniu.ACCESS_KEY
qiniu_sdk.conf.SECRET_KEY = qiniu.SECRET_KEY
// 要上传的空间
const bucket = qiniu.bucket
// 文件前缀
const prefix = 'image/activity/'
// 生成上传文件的 token
const token = (bucket, key) => {
const policy = new qiniu_sdk.rs.PutPolicy({ isPrefixalScope: 1, scope: bucket + ':' + key })
return policy.uploadToken()
}
const config = new qiniu_sdk.conf.Config()
const upload_file = (file_name, file_path) => {
// 保存到七牛的地址
const file_save_path = prefix + file_name
// 七牛上传的token
const up_token = token(bucket, file_save_path)
const extra = new qiniu_sdk.form_up.PutExtra()
const formUploader = new qiniu_sdk.form_up.FormUploader(config)
// 上传文件
formUploader.putFile(up_token, file_save_path, file_path, extra, (err, ret) => {
if (!err) {
// 上传成功, 处理返回值
console.log(ret);
} else {
// 上传失败, 处理返回代码
console.error(err);
}
});
}
upload_file('test.png', './images/test.png')
本文详细记录了在Node.js环境中如何正确使用七牛云官方SDK的过程,包括安装SDK、解决初始错误、PutExtra函数不存在的问题以及如何找到并使用example中的正确代码示例,最终提供了一份整理后的官方案例代码。

1254

被折叠的 条评论
为什么被折叠?



