Code Monkey home page Code Monkey logo

nodejs-sdk's Introduction

Qiniu Cloud SDK for Node.js

@qiniu on weibo Software License NodeJS CI GitHub release Code Climate Coverage Status Latest Stable Version

下载

从 npm 安装

这是我们建议的方式

$ npm install qiniu

从 release 版本下载

下载地址:https://github.com/qiniu/nodejs-sdk/releases

这里可以下载到旧版本的SDK,release 版本有版本号,有 CHANGELOG,使用规格也会比较稳定。

从 git 库下载

你可以直接用 git clone 下载源代码来使用。但是请注意非 master 分支的代码可能会变更,应谨慎使用。

使用

参考文档:七牛云存储 Node.js SDK 使用指南

测试

$ cd ./test/
$ source test-env.sh
$ mocha --grep 'bucketinfo'

贡献代码

  1. Fork
  2. 创建您的特性分支 (git checkout -b my-new-feature)
  3. 提交您的改动 (git commit -am 'Added some feature')
  4. 将您的修改记录提交到远程 git 仓库 (git push origin my-new-feature)
  5. 然后到 github 网站的该 git 远程仓库的 my-new-feature 分支下发起 Pull Request

许可证

Copyright (c) 2015 qiniu.com

基于 MIT 协议发布:

nodejs-sdk's People

Contributors

bachue avatar disoul avatar fengmk2 avatar frogcjn avatar gugaobai1994 avatar helloyou2012 avatar ikbear avatar ipy avatar jemygraw avatar killme2008 avatar liangchao07115 avatar liangchaoboy avatar lidaobing avatar lihsai0 avatar lintianzhi avatar longbai avatar longshanksmo avatar loulin avatar mei-zhao avatar okbang9 avatar rwifeng avatar sunln avatar thesadabc avatar why404 avatar willnewii avatar wong2 avatar xialeistudio avatar xushiwei avatar xuzhaokui avatar xwen-winnie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nodejs-sdk's Issues

fetch 不返回结果

你好,我在使用fetch服务时遇到了问题
fetch 图片 http://image.beekka.com/blog/2015/bg2015022204.gif
大小 2.3mb
需要很久才可以返回,有时甚至不返回。
导致程序一直在等待返回,能支持超时操作吗?
API 无论如何请保证返回结果给用户
文件太大无法下载或者下载超时,也该返回给用户一个错误
请问有什么解决方案吗?

TypeError: Not a buffer

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)上没问题,代码完全一致

感觉生成uploadtoken有问题,Android端报401

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;
};

http(s).request 需要考虑各种异常问题

看了一下rpc.js, 基本上连最低要求的请求超时都没有做处理。

如果熟悉python urllib的话, 可以考虑使用 urllib

自动判断http和https, 支持stream上传, 支持connection timeout和 response timeout; 支持真正意义上的http keepalive

上传文件时提示 400 请求参数错误

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);

服务器直传的问题

我看API说明 http://docs.qiniutek.com/v3/api/io/#server-upload ,是没有需要设置Content-Length的,但是实际情况不设置是不可以的。

而我的需求是直接上传一个ReadStream,在没有完全读取完毕之前,是不知道具体文件大小的。如果需要设置Content-Length,那么这个目前无法实现。

估计是因为服务器端是靠这个Content-Length来判断是否上传完毕,有什么其他办法吗?
还是说服务器端直传支持form upload的方式?

建议:所有路径拼装都使用path.join

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));

可以跨平台

为什么要把qiniu.rs.PutPolicy改掉?

6.1.7中qiniu.rs.PutPolicy接收的是obj ,
function PutPolicy(putPolicyObj)
为什么到6.1.8中变成了
PutPolicy(scope, callbackUrl, callbackBody, returnUrl, returnBody,asyncOps, endUser, expires, persistentOps, persistentNotifyUrl)

RangeError: Attempt to allocate Buffer larger than maximum size: 0x3fffffff bytes

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.
screen shot 2014-11-03 at 6 39 25 pm

hash(etag)

客户端未指定Key,上传策略中未设置saveKey,以文件hash(etag)命名

如何不指定key?

invalid multipart format

如果我的form upload 不设置 content-length, 就会出现 'invalid multipart format' 错误, 设置了 content-length , 则上传正常. 看文档form upload是没有强制要求 content-length 的.

fetcher 接口,超时后,下载未终止

使用fetch接口下载,当超时发生时,fetch返回

{
  code: -1,
  error: {
    [ConnectionTimeoutError: Request#1 timeout for 60000ms]
    name: 'ConnectionTimeoutError' 
  } 
}

但是,发现本次fetch并没有停止,并继续下载完文件。
而超时只是返回给我结果(无论该资源是由于太大未下载完超时,还是确实无法下载),这样会导致该文件像丢入大海一样,再也找不到了。

能否加入一个超时停止下载的参数呢,而不是仅仅告诉我下载超时?

上传文件回调模式

上传回调模式,上传成功还要需要一个公网的ip callback url,基于这点,整个项目的开发模式需要在一个拥有外网ip的机子上。而我们更多的是本地开发,远程服务器调试。这种模式降低对本地开发的模式。个人感觉这个是一种弊端,希望你能帮我解惑,谢谢。

缺少功能

没有列举资源(list)
另: endUser的使用API在手册里没有.

下载token生成问题

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>
  1. 我写了一个循环每过几秒调用一次上述的代码,发现每次生成的downloadUrl都一样,
    不是应该不一样的嘛?还是我哪里理解错了。
  2. 还有过期时间我设置的10s,感觉实际过期时间好像要长一点

求解,谢谢

获取图片信息的文档/API有误?

按照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 还是文档有错/更新不及时?

fetch 接口成功后能否返回一些文件信息

你好。问题标题
比如文件的大小,文件的HASH,文件的mimetype等信息。
这样一方面可以减少用户再次通过文件名来get文件信息,给七牛带来服务器压力。
另一方便也给用户减少了开支。最主要的是用起来方便很多。

npm update

I found sdk alway update 2.4.3 but npm already 2.4.2 ..

Can update package in npm?

上传文件502

根据sdk写了一个node脚本,大部分文件都上传成功,有一个js有6M大,上传时候502,请问有什么解决方法

iojs QueryString escape bug

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.

CRC32 和 CRC 的问题

虽然不知道这些东西用来干嘛,不过我相信应该是手误而已:Node 提醒无法找到 CRC。而你们设置的 Dependence 却是 CRC32,貌似只要将 Require 改成 CRC32 就好了。

qiniu.io.put 失败

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' } }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.