node-qiniu-sdk
Version:
nodejs,七牛云异步操作模块
132 lines (111 loc) • 4.08 kB
JavaScript
const fs = require('fs');
const rp = require('./request');
const Extends = require('./extends');
const Auth = require('qiniu-auth');
const debug = require('debug')('qiniu-sdk');
/**
* 文件HASH值
* 官方文档:https://developer.qiniu.com/dora/manual/1297/file-hash-value-qhash
*/
exports.qhash = function(url, algorithm){
if (!url) return Promise.reject('url is required');
algorithm = algorithm || 'sha1';
return rp({
url: url + '?qhash/' + algorithm
});
};
/**
* 文本文件合并
* 官方文档:https://developer.qiniu.com/dora/manual/1253/text-file-merging-concat
*/
exports.concat = function(options){
if (!options) return Promise.reject('options is required');
if (!options.mimeType) return Promise.reject('options.mimeType is required');
if (!options.urls) return Promise.reject('options.urls is required');
let { mimeType, urls, pfop } = options;
let encodedMimeType = Auth.urlsafe_base64_encode(mimeType);
let concat_fop = 'concat/mimeType/' + encodedMimeType;
urls.forEach(item => {
concat_fop += '/' + Auth.urlsafe_base64_encode(item);
});
// 如果有saveas需要曾加saveas操作
if (options.saveas) {
if (typeof options.saveas === 'object') {
options.saveas = options.saveas.bucketName + ':' + options.saveas.fileName;
}
concat_fop += '|saveas/' + Auth.urlsafe_base64_encode(options.saveas);
}
// 如果pfop不是function,只返回fop
if (typeof pfop !== 'function') return concat_fop;
return pfop(concat_fop);
};
/**
* 多文件压缩
* 官方文档:https://developer.qiniu.com/dora/manual/1667/mkzip
*/
exports.mkzip = function(options){
if (!options) return Promise.reject('options is required');
if (!options.urls) return Promise.reject('options.urls is required');
let { mode, encoding, urls, pfop } = options;
mode = mode || 2;
encoding = encoding || 'utf-8';
let mkzip_fop = 'mkzip/' + mode + '/encoding/' + Auth.urlsafe_base64_encode(encoding);
urls.forEach(item => {
let type = typeof item;
if (type === 'string') {
mkzip_fop += '/url/' + Auth.urlsafe_base64_encode(item);
} else if (type === 'object') {
mkzip_fop += '/url/' + Auth.urlsafe_base64_encode(item.url);
if (item.alias) mkzip_fop += '/alias/' + Auth.urlsafe_base64_encode(item.alias);
}
});
// 如果有saveas需要曾加saveas操作
if (options.saveas) {
if (typeof options.saveas === 'object') {
options.saveas = options.saveas.bucketName + ':' + options.saveas.fileName;
}
mkzip_fop += '|saveas/' + Auth.urlsafe_base64_encode(options.saveas);
}
// 如果pfop不是function,只返回fop
if (typeof pfop !== 'function') return mkzip_fop;
return pfop(mkzip_fop);
};
/**
* MD转HTML
* 官方文档:https://developer.qiniu.com/dora/manual/1285/md-html-md2html
*/
exports.md2html = function(url, options = {}){
if (!url) return Promise.reject('url is required');
let path = 'md2html';
options.mode = options.mode || 0;
path += '/' + options.mode;
if (options.cssUrl) path += '/css/' + Auth.urlsafe_base64_encode(options.cssUrl);
return rp({
url: url + '?' + path
});
};
/**
* 资源下载二维码
* 官方文档:https://developer.qiniu.com/dora/manual/1298/resource-download-the-qr-code-qrcode
*/
exports.qrcode = function(url, options = {}){
if (!url) return Promise.reject('url is required');
let path = 'qrcode';
options.mode = options.mode || 0;
path += '/' + options.mode;
if (options.level) path += '/level/' + options.level;
url += '?' + path;
try {
url = Extends.Image.processingFops(url, options);
} catch (error) {
return Promise.reject(error);
}
debug('processingFops return: S%', url);
// 如果是另存操作,直接返回这个就可以
if (options.saveas) return rp({ url });
if (!options.path && !options.stream) return Promise.resolve(url);
let writeStream = options.stream || fs.createWriteStream(options.path);
return rp({ url, pipe: writeStream });
};
// 扩展Resource
Object.assign(exports, Extends.Resource);