Atom中七牛图床配置+解决无法上传的问题
来源:互联网 发布:福建随行软件 编辑:程序博客网 时间:2024/06/08 16:01
基于Atom安装七牛图床
>1、安装qiniu-uploader和markwodn-assistant
步骤:点击文件,然后打开设置,随后点击安装,先安装qiniu-uploader
然后安装markwodn-assistant
>2、配置ainiu-uploader
首先注册七牛云的会员,进入控制管理台新建存储空间
获取 AK 和 SK
点击右上角的 个人面板 下的 密钥管理,在新的页面中点击 创建密钥,就会生成 AK 和 SK ,进入个人中心-密钥管理,如图:
>3、配置qiniu-uploader
点击文件-设置-扩展,找到qiniu-uploader,点击setting,然后配置如下图:接下来解决不能上传的问题
解决Bug
先附上错误图需要手动替换三个文件,这个三个文件在 ~/.atom/packages/qiniu-uploader/node_modules/qiniu/qiniu 目录中,这三个文件分别是 :
>1、io.js
var conf = require('./conf');var util = require('./util');
var rpc = require('./rpc');
var fs = require('fs');
var getCrc32 = require('crc32');
var url = require('url');
var mime = require('mime');
var Readable = require('stream').Readable;
var formstream = require('formstream');
var urllib = require('urllib');
var zone = require('./zone');
exports.UNDEFINED_KEY = '?'
exports.PutExtra = PutExtra;
exports.PutRet = PutRet;
exports.put = put;
exports.putWithoutKey = putWithoutKey;
exports.putFile = putFile;
exports.putReadable = putReadable;
exports.putFileWithoutKey = putFileWithoutKey;
// @gist PutExtra
function PutExtra(params, mimeType, crc32, checkCrc) {
this.params = params || {};
this.mimeType = mimeType || null;
this.crc32 = crc32 || null;
this.checkCrc = checkCrc || 0;
}
// @endgist
function PutRet(hash, key) {
this.hash = hash || null;
this.key = key || null;
}
// onret: callback function instead of ret
function putReadable(uptoken, key, rs, extra, onret) {
if (!extra) {
extra = new PutExtra();
}
if (!extra.mimeType) {
extra.mimeType = 'application/octet-stream';
}
if (!key) {
key = exports.UNDEFINED_KEY;
}
rs.on("error", function(err) {
onret({ code: -1, error: err.toString() }, {});
});
// 设置上传域名
// zone.up_host(uptoken, conf);
zone.up_host_async(uptoken, conf, function() {
var form = getMultipart(uptoken, key, rs, extra);
return rpc.postMultipart(conf.UP_HOST, form, onret);
});
}
function put(uptoken, key, body, extra, onret) {
var rs = new Readable();
rs.push(body);
rs.push(null);
if (!extra) {
extra = new PutExtra();
}
if (extra.checkCrc == 1) {
var bodyCrc32 = getCrc32(body);
extra.crc32 = '' + parseInt(bodyCrc32, 16);
} else if (extra.checkCrc == 2 && extra.crc32) {
extra.crc32 = '' + extra.crc32
}
return putReadable(uptoken, key, rs, extra, onret)
}
function putWithoutKey(uptoken, body, extra, onret) {
return put(uptoken, null, body, extra, onret);
}
function getMultipart(uptoken, key, rs, extra) {
var form = formstream();
form.field('token', uptoken);
if (key != exports.UNDEFINED_KEY) {
form.field('key', key);
}
form.stream('file', rs, key, extra.mimeType);
if (extra.crc32) {
form.field('crc32', extra.crc32);
}
for (var k in extra.params) {
form.field(k, extra.params[k]);
}
return form;
}
function putFile(uptoken, key, loadFile, extra, onret) {
var rs = fs.createReadStream(loadFile);
if (!extra) {
extra = new PutExtra();
}
if (extra.checkCrc == 1) {
var fileCrc32 = getCrc32(fs.readFileSync(loadFile));
extra.crc32 = '' + parseInt(fileCrc32, 16);
} else if (extra.checkCrc == 2 && extra.crc32) {
extra.crc32 = '' + extra.crc32
}
if (!extra.mimeType) {
extra.mimeType = mime.lookup(loadFile);
}
return putReadable(uptoken, key, rs, extra, onret);
}
function putFileWithoutKey(uptoken, loadFile, extra, onret) {
return putFile(uptoken, null, loadFile, extra, onret);
}
>2、rpc.js
var urllib = require('urllib');var util = require('./util');
var conf = require('./conf');
exports.postMultipart = postMultipart;
exports.postWithForm = postWithForm;
exports.postWithoutForm = postWithoutForm;
function postMultipart(uri, form, onret) {
return post(uri, form, form.headers(), onret);
}
function postWithForm(uri, form, token, onret) {
var headers = {
'Content-Type': 'application/x-www-form-urlencoded'
};
if (token) {
headers['Authorization'] = token;
}
return post(uri, form, headers, onret);
}
function postWithoutForm(uri, token, onret) {
var headers = {
'Content-Type': 'application/x-www-form-urlencoded',
};
if (token) {
headers['Authorization'] = token;
}
return post(uri, null, headers, onret);
}
function post(uri, form, headers, onresp) {
headers = headers || {};
headers['User-Agent'] = headers['User-Agent'] || conf.USER_AGENT;
var data = {
headers: headers,
method: 'POST',
dataType: 'json',
timeout: conf.RPC_TIMEOUT,
};
if (Buffer.isBuffer(form) || typeof form === 'string') {
data.content = form;
} else if (form) {
data.stream = form;
} else {
data.headers['Content-Length'] = 0;
};
var req = urllib.request(uri, data, function(err, result, res) {
var rerr = null;
if (err || Math.floor(res.statusCode / 100) !== 2) {
rerr = { code: res && res.statusCode || -1, error: err || result && result.error || '' };
}
onresp(rerr, result, res);
});
return req;
}
>3、zone.js
// var request = require('urllib-sync').request;var urllib = require('urllib');
var util = require('./util');
//conf 为全局变量
exports.up_host = function(uptoken, conf) {
var version = process.versions;
var num = version.node.split(".")[0];
// node 版本号低于 1.0.0, 使用默认域名上传,可以在conf中指定上传域名
if (num < 1) {
conf.AUTOZONE = false;
}
if (!conf.AUTOZONE) {
return;
}
var ak = uptoken.toString().split(":")[0];
var tokenPolicy = uptoken.toString().split(":")[2];
var tokenPolicyStr = new Buffer(tokenPolicy, 'base64').toString();
var json_tokenPolicyStr = JSON.parse(tokenPolicyStr);
var scope = json_tokenPolicyStr.scope;
var bucket = scope.toString().split(":")[0];
// bucket 相同,上传域名仍在过期时间内
if ((new Date().getTime() < conf.EXPIRE) && bucket == conf.BUCKET) {
return;
}
//记录bucket名
conf.BUCKET = bucket;
var request_url = 'http://uc.qbox.me/v1/query?ak=' + ak + '&bucket=' + bucket;
var res = request('http://uc.qbox.me/v1/query?ak=' + ak + '&bucket=' + bucket, {
'headers': {
'Content-Type': 'application/json'
}
});
if (res.statusCode == 200) {
var json_str = JSON.parse(res.body.toString());
//判断设置使用的协议, 默认使用http
if (conf.SCHEME == 'http') {
conf.UP_HOST = json_str.http.up[1];
} else {
conf.UP_HOST = json_str.https.up[0];
}
conf.EXPIRE = 86400 + new Date().getTime();
} else {
var err = new Error('Server responded with status code ' + res.statusCode + ':\n' + res.body.toString());
err.statusCode = res.statusCode;
err.headers = res.headers;
err.body = res.body;
throw err;
}
}
exports.up_host_async = function(uptoken, conf, callback) {
var version = process.versions;
var num = version.node.split(".")[0];
// node 版本号低于 1.0.0, 使用默认域名上传,可以在conf中指定上传域名
if (num < 1) {
conf.AUTOZONE = false;
}
if (!conf.AUTOZONE) {
callback();
return;
}
var ak = uptoken.toString().split(":")[0];
var tokenPolicy = uptoken.toString().split(":")[2];
var tokenPolicyStr = new Buffer(tokenPolicy, 'base64').toString();
var json_tokenPolicyStr = JSON.parse(tokenPolicyStr);
var scope = json_tokenPolicyStr.scope;
var bucket = scope.toString().split(":")[0];
// bucket 相同,上传域名仍在过期时间内
if ((new Date().getTime() < conf.EXPIRE) && bucket == conf.BUCKET) {
callback();
return;
}
//记录bucket名
conf.BUCKET = bucket;
var request_url = 'http://uc.qbox.me/v1/query?ak=' + ak + '&bucket=' + bucket;
var data = {
contentType: 'application/json',
method: 'GET',
};
var req = urllib.request(request_url, data, function(err, result, res) {
// console.log(result);
if (res.statusCode == 200) {
// console.log(result);
var json_str = JSON.parse(result.toString());
// console.log(json_str);
//判断设置使用的协议, 默认使用http
if (conf.SCHEME == 'http') {
conf.UP_HOST = json_str.http.up[1];
} else {
conf.UP_HOST = json_str.https.up[0];
}
conf.EXPIRE = 86400 + new Date().getTime();
callback();
return;
} else {
var err = new Error('Server responded with status code ' + res.statusCode + ':\n' + res.body.toString());
err.statusCode = res.statusCode;
err.headers = res.headers;
err.body = res.body;
throw err;
callback();
}
});
return;
}
将上述三个文件中的内容删除掉,换成上面的代码,然后重启Atom,就ok了。
阅读全文
0 0
- Atom中七牛图床配置+解决无法上传的问题
- 解决Atom中文无法自动换行问题
- ubuntu主机配置FTP后解决无法接受文件上传的问题
- 解决无法docker镜像无法上传的问题
- 解决Atom 的 GitHub 和 Git 面板无法打开
- 如何解决atom无法安装package的问题(gyp WARN install got an error, rolling back install)
- 解决blackboard building block上传后无法运行的问题
- 解决magento 1.6 无法上传图片的问题
- ECCMS解决IE8无法上传图片的问题
- 解决goagent >= 2.1.7 无法上传的问题
- 解决vsftp无法上传文件及文件夹的问题
- 解决TFS无法上传Nuget下载的DLL问题
- 解决 Selenium文件上传框无法识别的问题
- 解决svn库有些文件无法上传的问题
- 解决百度富文本编辑器无法上传视频的问题
- 解决vsftp无法上传文件及文件夹的问题
- 解决linux环境下,atom编辑器不支持中文的问题
- 解决Gvim 无法配置问题
- Girls and Boys
- 170929 逆向-Reversing.kr(Ransomware)
- 九个jsp内置对象
- 生活小记19
- Monkey and Banana dp
- Atom中七牛图床配置+解决无法上传的问题
- ros文件系统
- BZOJ 1029 建筑抢修 (贪心)
- 第五章 编写主引导扇区代码
- 21分钟Mysql入门教程--对前面的命令摘录
- 编译安装httpd,nginx,mysql,yum命令详解
- Ubuntu16.04安装MySQL数据库和可视化工具MySQL Workbench
- Q:JDK6中的substring()方法容易导致内存泄露而JDK7不会出现这样的情况的原因
- leetcode