| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /*
- * This file is part of HexoEditor.
- *
- * Copyright (c) 2018 zhuzhuyule
- */
- class qiniuServer {
- constructor(acessKey, secretKey) {
- this.XMLHttpRequest = require('./XMLHttpRequest').XMLHttpRequest;
- this.qiniu = require('qiniu');
- this.bucket = '';
- this.qiniu.conf.ACCESS_KEY = acessKey;
- this.qiniu.conf.SECRET_KEY = secretKey;
- this.mac = new this.qiniu.auth.digest.Mac(acessKey, secretKey);
- }
- /**
- * 更新信息
- * @param acessKey
- * @param secretKey
- * @param bucket
- * @param url
- */
- update(acessKey, secretKey, bucket, url) {
- acessKey = acessKey || moeApp.config.get('image-qiniu-accessKey');
- secretKey = secretKey || moeApp.config.get('image-qiniu-secretKey');
- this.qiniu.conf.ACCESS_KEY = acessKey;
- this.qiniu.conf.SECRET_KEY = secretKey;
- this.mac = new this.qiniu.auth.digest.Mac(acessKey, secretKey);
- this.bucket = bucket || this.bucket || '';
- this.url = url || this.url || '';
- }
- /**
- * 生成空间 文件名
- * @param bucket 空间名(必传)
- * @param key Key值
- * @returns {string}
- */
- getUptoken(bucket, key) {
- var options = {
- scope: bucket + ":" + key
- };
- var putPolicy = new this.qiniu.rs.PutPolicy(options);
- return putPolicy.uploadToken();
- }
- /**
- * 生成 AccessToken
- * @param url
- * @returns {string}
- */
- getAccessToken(url) {
- return this.qiniu.util.generateAccessToken(this.mac, url);
- }
- /**
- * 异步获取空间列表
- */
- getBuckets(callback) {
- const url_api_bukets = 'https://rs.qbox.me/buckets';
- let xhr = new this.XMLHttpRequest();
- xhr.open('get', url_api_bukets);
- xhr.setRequestHeader('Authorization', this.getAccessToken(url_api_bukets));
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- xhr.onreadystatechange = () => {
- if (xhr.readyState === 4) { // 成功完成
- if (typeof callback === "function") {
- callback({
- statusCode: xhr.status,
- data: JSON.parse(xhr.responseText)
- })
- }
- }
- }
- xhr.send();
- }
- /**
- * 异步获取空间地址URL列表
- * @param buketName 空间名(必传)
- */
- getBucketsUrl(buketName, callback) {
- const url_api_bukets = 'https://api.qiniu.com/v6/domain/list?tbl=' + buketName;
- let xhr = new this.XMLHttpRequest();
- xhr.open('get', url_api_bukets);
- xhr.setRequestHeader('Authorization', this.getAccessToken(url_api_bukets));
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- xhr.onreadystatechange = () => {
- if (xhr.readyState === 4) { // 成功完成
- if (typeof callback === "function") {
- callback({
- statusCode: xhr.status,
- data: JSON.parse(xhr.responseText)
- })
- }
- }
- }
- xhr.send();
- }
- /**
- * 异步获取服务器文件列表
- * @param buketName 空间名称(必传)
- * @param prefix 虚拟目录(选填)
- */
- getBucketsFiles(buketName, prefix, callback) {
- if (!buketName) return;
- const url_api_bukets = require('util').format(
- 'https://rsf.qbox.me/list?bucket=%s&marker=&limit=1&prefix=%s&delimiter=/', buketName, prefix || '')
- let xhr = new this.XMLHttpRequest();
- xhr.open('get', url_api_bukets);
- xhr.setRequestHeader('Authorization', this.getAccessToken(url_api_bukets));
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- xhr.onreadystatechange = () => {
- if (xhr.readyState === 4) { // 成功完成
- if (typeof callback === "function") {
- callback({
- statusCode: xhr.status,
- data: JSON.parse(xhr.responseText)
- })
- }
- }
- }
- xhr.send();
- }
- /**
- * 异步上传单个文件
- * @param localFile 本地文件全路径
- * @param serverFileName 服务器保存名称(可带地址)
- * @param callback callback(response) //回调函数
- * response = {
- * id: 'localFileAbsolutePath', //传入文件本地绝对路径
- * statusCode: 200|int, //服务器代码,200:正常,其他:报错
- * data: {
- * localname: 'abc.png', //本地文件名
- * storename: '5a6bea876702d.png', //服务器文件名,SM.MS随机生成
- * path: '/abc/abc/5a6bea876702d.png', //服务器路径
- * url: 'https://...../abc/abc/5a6bea876702d.png' //图片地址
- * },
- * msg: 'error message' //一般只有报错才使用到
- * errorlist: 'url' //一般只有报错才使用到
- * }
- */
- uploadFile(localFile, serverFileName, callback) {
- //生成上传 Token
- let token = this.getUptoken(this.bucket, serverFileName);
- var formUploader = new this.qiniu.form_up.FormUploader(this.qiniu.conf);
- var extra = new this.qiniu.form_up.PutExtra();
- let qiniuServer = this;
- formUploader.putFile(token, serverFileName, localFile, extra,
- function (respErr, respBody, respInfo) {
- if (typeof callback == 'function') {
- let result = {id: localFile};
- if (respInfo.statusCode == 200 || respInfo.statusCode == 579) {
- result.statusCode = 200;
- result.data = {
- localname: path.basename(localFile),
- storename: path.basename(serverFileName),
- path: respBody.key,
- url: qiniuServer.url + respBody.key
- }
- result.msg = '';
- result.errorlist = '';
- } else {
- result.msg = respInfo.statusCode + respBody.error;
- result.errorlist = 'https://developer.qiniu.com/kodo/api/3928/error-responses#2';
- }
- } else {
- console.log(respBody)
- }
- });
- }
- }
- module.exports = qiniuServer;
|