GithubHelp home page GithubHelp logo

qiniu / nodejs-sdk Goto Github PK

View Code? Open in Web Editor NEW
586.0 36.0 190.0 1020 KB

Qiniu Resource (Cloud) Storage SDK for Node.js

Makefile 0.03% JavaScript 99.92% Shell 0.04%
qiniu-resource storage-sdk nodejs qiniu qiniucloud

nodejs-sdk's Issues

获取图片信息的文档/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 还是文档有错/更新不及时?

npm update

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

Can update package in npm?

为什么要把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)

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

CRC32 和 CRC 的问题

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

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

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

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.

服务器直传的问题

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

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

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

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

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

建议:所有路径拼装都使用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));

可以跨平台

fetch 不返回结果

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

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

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

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

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

感觉生成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;
};

缺少功能

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

上传文件时提示 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);

上传文件502

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

上传文件回调模式

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

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

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

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

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

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

下载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,感觉实际过期时间好像要长一点

求解,谢谢

hash(etag)

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

如何不指定key?

invalid multipart format

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

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.