qiniu / nodejs-sdk Goto Github PK
View Code? Open in Web Editor NEWQiniu Resource (Cloud) Storage SDK for Node.js
Qiniu Resource (Cloud) Storage SDK for Node.js
按照http://developer.qiniu.com/docs/v6/sdk/nodejs-sdk.html中步骤:
// 注意,这一步返回: http://bucketname/key,不是合法的可访问的url
var url = qiniu.rs.makeBaseUrl(bucketName, key);
var ii = new qiniu.fop.ImageInfo();
url = ii.makeRequest(url);
var policy = new qiniu.rs.GetPolicy();
url = policy.makeRequest(url);
console.log('在浏览器输入: ' + url); // ii.makeRequest和policy.makeRequest后url仍然不合法
假设bucket: bk, key: 1.png
,按以上步骤返回http://bk/1.png?imageInfo&e=xx&token=xx
。
最终返回的url甚至不是合法的url,手动插入.qiniudn.com
才是可访问的url。
那么问题来了,究竟是qiniu.rs.makeBaseUrl
API 本身有 bug 还是文档有错/更新不及时?
http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html
这页提到的功能请问有考虑实现吗?
七牛通过node-sdk上传图片出现这个错误write EPIPE。
个人猜测是图片过大的问题。如果是图片过大,怎么处理这个问题?
I found sdk alway update 2.4.3 but npm already 2.4.2 ..
Can update package in npm?
这个nodejs的sdk支持批量上传图片的功能吗
sdk文档中描述:var conn = new qiniu.digestauth.Client(); master上代码无digistauth。
安装方法修改为:
npm install qiniu
6.1.7中qiniu.rs.PutPolicy接收的是obj ,
function PutPolicy(putPolicyObj)
为什么到6.1.8中变成了
PutPolicy(scope, callbackUrl, callbackBody, returnUrl, returnBody,asyncOps, endUser, expires, persistentOps, persistentNotifyUrl)
比如:
12 Jun 11:04:52 - { code: -1,
error: { [ConnectionTimeoutError: Request#94 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:52 - { code: -1,
error: { [ConnectionTimeoutError: Request#95 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:52 - { code: -1,
error: { [ConnectionTimeoutError: Request#96 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#97 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#98 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#99 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#100 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#101 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#102 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#103 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#104 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#105 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#106 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:53 - { code: -1,
error: { [ConnectionTimeoutError: Request#107 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:54 - { code: -1,
error: { [ConnectionTimeoutError: Request#108 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:54 - { code: -1,
error: { [ConnectionTimeoutError: Request#109 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:54 - { code: -1,
error: { [ConnectionTimeoutError: Request#110 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
12 Jun 11:04:55 - { code: -1,
error: { [ConnectionTimeoutError: Request#111 timeout for 5000ms] name: 'ConnectionTimeoutError' } }
虽然不知道这些东西用来干嘛,不过我相信应该是手误而已:Node 提醒无法找到 CRC。而你们设置的 Dependence 却是 CRC32,貌似只要将 Require 改成 CRC32 就好了。
I am using node-webkit with qiniu/nodejs-sdk. I am uploading an 7KB image with following code, almost identical to the code in examples.
function getUploadToken(bucketName) {
var putPolicy = new qiniu.rs.PutPolicy(bucketName);
return putPolicy.token();
}
function uploadFile(localFile, key) {
var extra = new qiniu.io.PutExtra(),
token = getUploadToken($('#bucket_name').val());
qiniu.io.putFile(token, key, localFile, extra, function(err, ret) {
if(!err) {
console.log(ret.key, ret.hash);
} else {
console.log(err);
}
});
}
But when I try to upload the image, I got a RangeError: Attempt to allocate Buffer larger than maximum size: 0x3fffffff bytes.
基于版本:6.1.5。
如题。整个sdk甚至没有fsizeLimit关键字。
根据官方文档,是应该有这个特性的:
http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html
我要在浏览器里面生成授权url
获取私有资源
该如何操作,
如题,多谢!
TypeError: Not a buffer
at TypeError (native)
at new Hmac (crypto.js:136:16)
at Object.Hmac (crypto.js:134:12)
at Object.exports.hmacSha1 (/home/node/api/source/node_modules/qiniu/qiniu/util.js:25:21)
at PutPolicy.token (/home/node/api/source/node_modules/qiniu/qiniu/rs.js:158:22)
...
在阿里云上有问题(node版本0.12.2),在我mac的开发机(node版本0.12.0)上没问题,代码完全一致
Error report
TypeError: undefined is not a function
at Object.QueryString.escape (querystring.js:101:13)
at Object.makeBaseUrl (/Users/willin/app/node_modules/qiniu/qiniu/rs.js:242:29)
at downloadAction (/Users/willin/app/App/Lib/Controller/Version/LogController.js:44:27)
at /Users/willin/app/node_modules/thinkjs/lib/Lib/Core/App.js:118:30
file at qiniu/qiniu/rs.js
line 243
// query like '-thumbnail', '?imageMogr2/thumbnail/960x' and so on
function makeBaseUrl(domain, key, query) {
key = new Buffer(key);
return 'http://' + domain + '/' + querystring.escape(key) + (query||'');
}
Escape param should be a string.
// query like '-thumbnail', '?imageMogr2/thumbnail/960x' and so on
function makeBaseUrl(domain, key, query) {
//key = new Buffer(key);
return 'http://' + domain + '/' + querystring.escape(key) + (query||'');
}
will be ok.
FYI
我看API说明 http://docs.qiniutek.com/v3/api/io/#server-upload ,是没有需要设置Content-Length的,但是实际情况不设置是不可以的。
而我的需求是直接上传一个ReadStream,在没有完全读取完毕之前,是不知道具体文件大小的。如果需要设置Content-Length,那么这个目前无法实现。
估计是因为服务器端是靠这个Content-Length来判断是否上传完毕,有什么其他办法吗?
还是说服务器端直传支持form upload的方式?
从npm 安装时候是6.0.0,。https://github.com/qiniu/nodejs-sdk/releases
在rs.js 第 168 行
if (this.callbackUrl != null) {
flags['callbackUrl'] = this.scope; // 应该是 ths.callbackUrl
}
导致回调都不可用。
也就是npm安装的跟 master上的不一致
麻烦请更新下,谢谢
https://github.com/qiniu/nodejs-sdk/blob/master/CHANGELOG.md
根据 CHANGELOG 得知此 v6.0.1 有 2 个问题:
有打算支持么,非常感谢~
你好。问题标题
比如文件的大小,文件的HASH,文件的mimetype等信息。
这样一方面可以减少用户再次通过文件名来get文件信息,给七牛带来服务器压力。
另一方便也给用户减少了开支。最主要的是用起来方便很多。
statuscode :400
{"error":"scope not specified"}"
var url = config.IO_HOST + '/put-auth/' + expires + '/callback/' + util.encode(callbackUrl);
改成
//var path = require('path');
var url = path.join( config.IO_HOST , '/put-auth/' , expires , '/callback/' , util.encode(callbackUrl));
可以跨平台
你好,我在使用fetch服务时遇到了问题
fetch 图片 http://image.beekka.com/blog/2015/bg2015022204.gif
大小 2.3mb
需要很久才可以返回,有时甚至不返回。
导致程序一直在等待返回,能支持超时操作吗?
API 无论如何请保证返回结果给用户
文件太大无法下载或者下载超时,也该返回给用户一个错误
请问有什么解决方案吗?
官方原生接口已经更新了。imageView
接口应该更新成imageView2
接口。
看了一下rpc.js, 基本上连最低要求的请求超时都没有做处理。
如果熟悉python urllib的话, 可以考虑使用 urllib
自动判断http和https, 支持stream上传, 支持connection timeout和 response timeout; 支持真正意义上的http keepalive
readme里面的文档链接不见了 。
According to your SDK document(http://docs.qiniutek.com/v3/sdk/nodejs/),I use the code below to create a http client:
var conn = new qiniu.digestauth.Client();
However, it raise the error:TypeError: Cannot read property 'Client' of undefined
After I google the solution and check it once again base on your SDK doucment, I found there is no one solution can help me fix this problem.
Thanks a lot~
如题。
目前 NodeJS SDK git 主库里边的 docs/README.md 和 SDK 暴露的API方法脱节比较严重,需要重新整理。可以先拟个文档的目录结构,暂以 docs/README2.md 存档进行编写。
范例参考:
http://docs.qiniutek.com/v3/sdk/ruby/
https://github.com/qiniu/php5-sdk/pull/15/files
很多变量不支持,比如saveKey,开始我还以为是qiniu本身没实现。
qn 中得uploadtoken 产生函数
exports.uploadToken = function uploadToken(options) {
options = options || {};
options.scope = options.scope || this.options.bucket;
options.deadline = options.deadline || (utility.timestamp() + 3600);
var flags = options;
// 步骤2:将 Flags 进行安全编码
var encodedFlags = utility.base64encode(JSON.stringify(flags), true);
// 步骤3:将编码后的元数据混入私钥进行签名
// 步骤4:将签名摘要值进行安全编码
var encodedSign = this.signData(encodedFlags);
// 步骤5:连接各字符串,生成上传授权凭证
return this.options.accessKey + ':' + encodedSign + ':' + encodedFlags;
};
使用fetch 下载 http://img3.laibafile.cn/p/m/203955675.jpg
发现http 头不设置referer: 'http://bbs.tianya.cn/post-develop-1982790-1.shtml'
下载图片为防盗链的图片。
使用wget 设置referer即可下载
但是我手动设置了referer头还是下载了防盗链的图片。
请问七牛fetch时是不是没有使用我设置referer
没有列举资源(list)
另: endUser的使用API在手册里没有.
util.js
exports.generateActionString = function(localFile, bucket, key, mimeType, customMeta, enableCrc32Check) {
if (!fs.existsSync(localFile)) {
return;
}
第一个参数是文件的地址
rs.js 调用时传递的参数却是文件的名称
var actionString = util.generateActionString(filename, bucket, key, mimeType, customMeta, enableCrc32Check);
根据sdk写了一个node脚本,大部分文件都上传成功,有一个js有6M大,上传时候502,请问有什么解决方法
上传回调模式,上传成功还要需要一个公网的ip callback url,基于这点,整个项目的开发模式需要在一个拥有外网ip的机子上。而我们更多的是本地开发,远程服务器调试。这种模式降低对本地开发的模式。个人感觉这个是一种弊端,希望你能帮我解惑,谢谢。
见代码:https://github.com/qiniu/nodejs-sdk.v6/blob/master/qiniu/rpc.js#L55,为什么改成了普通对象而不是直接将Error对象返回。code可以挂在Error对象上的呀。
使用fetch接口下载,当超时发生时,fetch返回
{
code: -1,
error: {
[ConnectionTimeoutError: Request#1 timeout for 60000ms]
name: 'ConnectionTimeoutError'
}
}
但是,发现本次fetch并没有停止,并继续下载完文件。
而超时只是返回给我结果(无论该资源是由于太大未下载完超时,还是确实无法下载),这样会导致该文件像丢入大海一样,再也找不到了。
能否加入一个超时停止下载的参数呢,而不是仅仅告诉我下载超时?
http://docs.qiniu.com/nodejs-sdk/v2/index.html#default-upload
文档里写了 Upload()函数封装了以上断点续上传和非断点续上传的方式。
但是 grep 后发现:
$ grep 'BLOCK_SIZE' -r *
lib/conf.js:exports.BLOCK_SIZE = 1024*1024*4; // Block Size: 4MB
$ grep 'mkblk' -r *
$
BLOCK_SIZE 只找到设置段, 而接口 URL 里带的 mkblk 没有.
how to set http proxy?
var policy = new qiniu.rs.GetPolicy(10)
var baseUrl = qiniu.rs.makeBaseUrl('...', '...')
var downloadUrl = policy.makeRequest(baseUrl)
console.log(downloadUrl) // http://<domain>/<key>?e=<deadline>&token=<dntoken>
求解,谢谢
客户端未指定Key,上传策略中未设置saveKey,以文件hash(etag)命名
如何不指定key?
如果我的form upload 不设置 content-length, 就会出现 'invalid multipart format' 错误, 设置了 content-length , 则上传正常. 看文档form upload是没有强制要求 content-length 的.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.