tencentyun / cos-nodejs-sdk-v5 Goto Github PK
View Code? Open in Web Editor NEW腾讯云 COS Nodejs SDK(XML API)
Home Page: https://cloud.tencent.com/product/cos
License: MIT License
腾讯云 COS Nodejs SDK(XML API)
Home Page: https://cloud.tencent.com/product/cos
License: MIT License
2018-09-26 08:34 +08:00: TypeError: params.outputStream.on is not a function
at COS._submitRequest (/wiz/app/wizserver.20180925.1736/node_modules/cos-nodejs-sdk-v5/sdk/base.js:2268:29)
at /wiz/app/wizserver.20180925.1736/node_modules/cos-nodejs-sdk-v5/sdk/base.js:2061:24
这个是什么错误?
代码如下:
uploadFileList.forEach((item)=>{
cos.sliceUploadFile({
Bucket: args.bucket,
Region: args.region,
Key: item.key,
FilePath: item.filePath,
}, (err, data)=>{
if (err) {
console.log(err);
} else {
console.log(data);
}
});
});
其中,uploadFileList是一个数组,遍历出的item对象如下
{
key: '/tags/PHP/index.html',
filePath: '/home/dongdong/Documents/hexo/public/tags/PHP/index.html'
}
假设静态托管的网址为http://exp.com
上传完成后,访问这个页面(http://exp.com/tags/PHP),会报unexpectedly closed the connection.
但是如果访问http://exp.com/tags/PHP/index.html,就正常,而且我如果手动上传这个文件,就不会出现这种情况,所有的访问都是正常的
{ loaded: 20215, total: 10485760, speed: 18511.9, percent: 0 }
{ loaded: 20215, total: 10485760, speed: 0, percent: 0 }
{ error: { Error: socket hang up
at createHangUpError (_http_client.js:312:15)
at TLSSocket.socketOnEnd (_http_client.js:405:23)
at TLSSocket.emit (events.js:187:15)
at endReadableNT (_stream_readable.js:1091:14)
at process._tickCallback (internal/process/next_tick.js:174:19) code: 'ECONNRESET' } }
不支持设置文件的cache-control:max-age,希望得到支持,v3版本就可以
原因是在使用request的时候传了回调函数。然后会调用request.readResponseBody方法。
在创建request对象的时候会判断是否传递了回调函数,如果传递了则:https://github.com/request/request/blob/master/request.js#L1092
现在是直接保存成文件,并且是下载完成后才会回调。
应该增加下载对象为stream,这样方便把这个stream pipe到http response里面。否则的话,就只能下载到本地临时文件,然后再返回给客户。对于大文件,很容易超时,至少效率有问题。直接返回一个stream就好多了。s3,oss都是可以的
请问如何上传文件到bucket下的指定目录?
uploadslicefile 接口中的 KEY值不能有'/',请问如何上传到指定目录呢
如 ’mybucket/mysubfolder/‘下
我看了sliceUploadFile和putObject等方法的示例,好像都是从我server读取一个文件/文件流上传到qcloud服务器。我想问下sdk是否提供了代理的方式,让我从server把上传文件请求代理到qcloud服务器,而不需要保存到本地。
现在抛出的错误不是标准Error对象,没有堆栈,难以跟踪debug,建议使用下面的形式
var e=new Error(‘some error’)
e.info = 'other info'
throw e
计算完分块的 ETag 值,以及获取到上传成功的文件分块的 ETag ,然后合并两者,更新需要上传的分块
x-cos-content-sha1,貌似不校验?
签名算法urlencode更蛋疼。golang的实现空格转义为+,js的实现转义为%20;golang的实现/转义为%2F,js的实现转义为%2f,其他还有什么坑还不知道,难道我要把相关库重新实现一遍么?
D:\visualization-server\node_modules\cos-nodejs-sdk-v5\sdk\base.js:131
var contents = data.ListBucketResult.Contents || [];
^
TypeError: Cannot read property 'Contents' of undefined
at D:\visualization-server\node_modules\cos-nodejs-sdk-v5\sdk\base.js:131:46
at cb (D:\visualization-server\node_modules\cos-nodejs-sdk-v5\sdk\base.js:2073:13)
at Request. (D:\visualization-server\node_modules\cos-nodejs-sdk-v5\sdk\base.js:2119:29)
at Request.emit (events.js:164:20)
at IncomingMessage. (D:\visualization-server\node_modules\request\request.js:1085:12)
at Object.onceWrapper (events.js:254:19)
at IncomingMessage.emit (events.js:164:20)
at endReadableNT (_stream_readable.js:1054:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
网络中断 会出现错误
支持Promise 能够回避一些难以调试的错误,同时也能减轻代码横向发展的症状。十分期待,未来对此的支持
报403错误
当我上传一个stream的时候,并不能知道这个stream的大小。
用demo上传文件时
以下是config
Bucket: 'tbtest',
Region: 'cossh'
以下是log
node node_modules/cos-nodejs-sdk-v5/demo/demo.js
1mb.zip create success
{ error:
{ Error: socket hang up
at createHangUpError (_http_client.js:302:15)
at Socket.socketOnEnd (_http_client.js:394:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:188:7)
at endReadableNT (_stream_readable.js:975:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickCallback (internal/process/next_tick.js:104:9) code: 'ECONNRESET' } }
近期由于华北园区上线新的 MultipartComplete 接口,导致分片上传方法返回如下错误:
{
error: {
Code: 'InvalidArgument',
Message: 'Invalid Argument',
xxx: xxx
}
}
如遇到,请尝试更新到最新版本代码。
使用该sdk ,sliceUploadFile 上传图片 ,一直报403错误,求解,东西都没有错
{"error":{"Code":"AccessDenied","Message":"Access Denied.","Resource":"zp-125143.cos.ap-sh**ai.myqcloud.com/upload/1526661248697.png","RequestId":"NWFmZjAwNzlfZGFhMDY4NjRfODZkNl83N2I3YQ==","TraceId":"OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTQyYWVlY2QwZTk2MDVmZDQ3MmI2Y2I4ZmI5ZmM4ODFjZmJjODk2ZGRhYzY5ODkwOWQ1NThkZTFhOWQyNTY3MjM="},"statusCode":403,"headers":{"content-type":"application/xml","content-length":"476","connection":"close","date":"Fri, 18 May 2018 16:34:01 GMT","server":"tencent-cos","x-cos-request-id":"NWFmZjAwNzlfZGFhMDY4NjRfODZkNl83N2I3YQ==","x-cos-trace-id":"OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTQyYWVlY2QwZTk2MDVmZDQ3MmI2Y2I4ZmI5ZmM4ODFjZmJjODk2ZGRhYzY5ODkwOWQ1NThkZTFhOWQyNTY3MjM="}
Cannot read property 'FilePath' of undefined
在cos-nodejs-sdk-v5/sdk/utils.js文件里的util.getFileUUID方法
{ error:
{ Code: 'MalformedXML',
Message: 'The XML you provided was not well-formed or did not validate agai
nst our published schema.',
Resource: 'backup0-1253554307.cos.ap-guangzhou.myqcloud.com/a.txt',
RequestId: 'NWE0MWI5MjdfMTliYjk0MGFfZDI5MV80MTBkM2I=',
TraceId: 'OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2M
TRlY2MzZDhmNmI5MWI1OTI5MWRkM2I1ZDU3ZWE5Y2YzNDYzZTEzY2JlMjU3NDQ0MTAzNGQyNTFiM2NjY
jgzZjgwNGNmNTRjMmM3OWNhZGM=' },
statusCode: 400,
headers:
{ 'content-type': 'application/xml',
'content-length': '531',
connection: 'close',
date: 'Tue, 26 Dec 2017 02:51:19 GMT',
server: 'tencent-cos',
'x-cos-request-id': 'NWE0MWI5MjdfMTliYjk0MGFfZDI5MV80MTBkM2I=',
'x-cos-trace-id': 'OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1
NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTI5MWRkM2I1ZDU3ZWE5Y2YzNDYzZTEzY2JlMjU3NDQ0MTAzNGQy
NTFiM2NjYjgzZjgwNGNmNTRjMmM3OWNhZGM=' } }
使用putObject上传一个音频文件,报这样的错误。
{ error:
{ Error: socket hang up
at createHangUpError (_http_client.js:344:15)
at Socket.socketOnEnd (_http_client.js:436:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1047:12)
at _combinedTickCallback (internal/process/next_tick.js:102:11)
at process._tickCallback (internal/process/next_tick.js:161:9) code: 'ECONNRESET' } }
这是上传文件的代码:
const saveAudio = (ctx, audio, id)=>{
return new Promise((resolve, reject)=>{
const { name, mimetype } = audio
if(mimetype.indexOf('audio')==-1){
resolve({
code: 1,
msg: '文件格式错误'
})
}
let location = `audios/${name}`;
let param = Object.assign({},baseParam,{
Key: location,
Body: audio,
ContentType: 'application/octet-stream',
ContentLength: ctx.request.length,
onProgress: function (progressData) {
console.log(progressData);
}
})
cos.putObject(param,function(err,data){
if(err){
console.log(err)
reject(err)
}
resolve({
name: name,
src: baseSrc+location
})
})
})
}
param部分
{
Bucket: myBucket,
Region: 'cn-north',
Key: 'audios/test.mp3',
Body: audio, // 可写流
ContentType: 'application/octet-stream',
ContentLength: ctx.request.length,
onProgress: function (progressData) {
console.log(progressData);
}
}
1、COS.config.setAppInfo(AppId, SecretId, SecretKey, timeout)
v3 nodeSDK之前有上面这接口,这里可不可以用?我用时报错 "....setAppInfo ##undefined"
2、在bucket里面建文件夹,用putObject() 可以上传到bucket的子文件夹里面吗?
3、putObject()返回的ETag是做什么用的?有包含文件信息?MD5 算法校验值可以解密?上传的是图片或视频可以通过指定的 url 预览吗?
以上问题求解啊,谢谢!
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
<Resource>
aodi-1257103690.cos.ap-shanghai.myqcloud.com/AD-16.JPG
</Resource>
<RequestId>NWI1NzYwNmFfZTFhMDY4NjRfMzE1OV9hYjZiY2Y=</RequestId>
<TraceId>
OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTQyYWVlY2QwZTk2MDVmZDQ3MmI2Y2I4ZmI5ZmM4ODFjZmJjODk2ZGRhYzY5ODkwOWQ1NThkZTFhOWQyNTY3MjM=
</TraceId>
</Error>
到目前为止,上传这块儿还欠缺好多要改进的地方额。你现在只是在文件上传成功后 返回一个状态!
具体说下问题:
1、上传的过程中读取不到单个文件上传进度;
2、多文件同时上传可有什么限制?最多同时上传文件个数,以及每个文件上传的进度;
3、Upload Part[支持的块的数量为1到10000,块的大小为1 MB 到5 GB],这里指的是所有文件加一起的块限制吧? 那我同时上传一万多个文件怎么办!
4、暂停上传单个文件呢?暂停所有文件呢?
5、客户端异常退出或者网络断开 再到恢复 之前未上传和正在上传等的进度信息如何获取?
There's still a lot to change ! 頑張って!
请问有设置文件的标准,低频,或者归档存储的api接口吗,我找了文档没找到
好像getBucket没有列出文件夹信息,我也没找到对文件夹操作的方法。
如题,很多时候在node端拿到的其实是文件的base64编码,这样可以摆脱filepath的拘束。COS端有base64的上传接口吗?如果有能否支持?
s3, oss都有通过一个key查询对象的功能,cos没有。这是一个很基础的功能,请考虑增加。
腾讯的对象存储可以不可以做这样的功能?
我使用
fs.readdirSync
读取文件夹里的文件,然后用forEach
对文件进行循环上传,但每次第二个和第三个文件总是会报错Code: 'MalformedXML', Message: 'The XML you provided was not well-formed or did not validate against our published schema.',
require('dotenv').config({
path: '../.env'
});
var COS = require('cos-nodejs-sdk-v5');
var fs = require('fs');
var cos = new COS({
SecretId: process.env.COS_SECRET_ID,
SecretKey: process.env.COS_SECRET_KEY,
});
console.log('Angular File Uploading...');
fs.readdirSync('./dist/').forEach(file => {
cos.sliceUploadFile({
Bucket: 'test-' + process.env.COS_APPID,
Region: 'ap-shanghai',
Key: 'resource/' + file,
FilePath: './dist/' + file
}, function(err, data) {
if(err) {
console.error(err);
}
});
})
{ error:
{ Code: 'MalformedXML',
Message: 'The XML you provided was not well-formed or did not validate against our published schema.',
Resource: '************************************',
RequestId: '************************************',
TraceId: '************************************' },
statusCode: 400,
headers:
{ 'content-type': 'application/xml',
'content-length': '540',
connection: 'close',
date: 'Fri, 24 Aug 2018 07:29:41 GMT',
server: 'tencent-cos',
'x-cos-request-id': '************************************',
'x-cos-trace-id': '************************************' } }
不管什么文件只要在读取数组的第二个和第三个,也就是引索是1,2的时候,上传就会报上面的错,其他的位置没问题
一个 Atom下的插件,更新 sdk 到最新版以后,没法上传了。提示:
params body format error, Only allow File|Blob|String'
Body 使用 fs.readFileSync(filepath)
或 fs.createReadStream(filepath)
都不行。尝试用 ToString
,别的地方又出错。
测试了一下,在命令行中,可以正常上传,Atom里就废了。 最后定位到这里:
var getFileSize = function (api, params, callback) {
var size;
if (util.isBrowser) {
if (typeof params.Body === 'string') {
params.Body = new global.Blob([params.Body]);
}
if (params.Body instanceof global.File || params.Body instanceof global.Blob) {
size = params.Body.size;
} else {
callback({error: 'params body format error, Only allow File|Blob|String.'});
return;
}
}
请问这是 Bug 还是要用其他方式传递 Body? 其他方式的话,应该是什么呢?新手学习中,很多函数不知道, 找了快一天了,没找到能用的办法。
随便创建一个Bucket 接口返回的时间是: 2017-08-11T09:26:52Z
UTC时间格式?
解析一下时间
结果是: 2017-08-11 17:26:52
昨天下午创建的bucket 拿到的时间转换一下后是 凌晨的...
你们的Bucket时间拿错了 真的
Object 返回的时间是正确的!
按照官网的 sdk 配置步骤,需要执行一次 npm install
,但是并没有 package.json 文件,npm install
并不能成功执行。目前只能通过手动查看引用依赖来安装相应的库,希望补上 package.json
getAuth中文档有误,expires没有大写的。以安装包里的为准
返回结果中不包含创建Bucket时返回的 Location ,这不合理吧,只是把 key 返回了
appid 在哪里找
我有一个疑问,我看demo都是从浏览器端上传完整文件到服务器,再从服务器上传到qcloud,这种方式我应该如何控制进度,是否存在代理的方式,之间把上传流转到qcloud而不再本地存储。
这个问题让我们服务炸了三天
Current:
if (queue.length > cos.options.UploadQueueSize) {
queue.splice(0, queue.length - cos.options.UploadQueueSize);
}
Fix:
if (queue.length > cos.options.UploadQueueSize) {
const delta = queue.length - cos.options.UploadQueueSize;
queue.splice(0, delta);
nextUploadIndex -= delta;
}
node sdk
js const cos = new COS({ SecretId: this.config.SecretId, SecretKey: this.config.SecretKey }) const Authorization = cos.getAuth({ Method: reqData.method, key: '', Expires: 3600 })
js sdk
js var cos = new COS({ getAuthorization: function(options, callback) { callback({ Authorization: res.data.Authorization }) } }) cos.putObject( { Bucket: res.data.Bucket, Region: res.data.Region, Key: Key, Body: Body }, function(err, data) { console.log(err, data) return data } )
为啥我上传图片后,访问 url 不是显示图片,而是让我下载?
ACL参数设置为'public-read', 然后无效,在控制台中还是显示私有读写。。。
我试着修改task.js的代码第89行
if(Buffer.isBuffer(params.FilePath)){
size = params.FilePath.size;
}
else{
size = fs.statSync(params.FilePath).size;
}
但是会报400 Invalid Arguments
"cos-nodejs-sdk-v5": "^2.3.6"
2018-04-09 10:38:12.723 58f05b19 Error: "start" option must be <= "end" option
2018-04-09 10:38:12.723 58f05b19 at new ReadStream (fs.js:1962:13)
2018-04-09 10:38:12.724 58f05b19 at Object.fs.createReadStream (fs.js:1923:10)
2018-04-09 10:38:12.724 58f05b19 at COS.uploadSliceItem (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/advance.js:486:19)
2018-04-09 10:38:12.724 58f05b19 at /var/www/node_modules/cos-nodejs-sdk-v5/sdk/advance.js:420:25
2018-04-09 10:38:12.724 58f05b19 at replenish (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/async.js:19:13)
2018-04-09 10:38:12.724 58f05b19 at Object.eachLimit (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/async.js:35:7)
2018-04-09 10:38:12.724 58f05b19 at COS.uploadSliceList (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/advance.js:415:11)
2018-04-09 10:38:12.724 58f05b19 at Array. (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/advance.js:54:25)
2018-04-09 10:38:12.724 58f05b19 at EventProxy.cos.emit (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/event.js:24:20)
2018-04-09 10:38:12.725 58f05b19 at /var/www/node_modules/cos-nodejs-sdk-v5/sdk/advance.js:95:20
2018-04-09 10:38:12.725 58f05b19 at Array. (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/advance.js:241:9)
2018-04-09 10:38:12.725 58f05b19 at EventProxy.cos.emit (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/event.js:24:20)
2018-04-09 10:38:12.725 58f05b19 at /var/www/node_modules/cos-nodejs-sdk-v5/sdk/advance.js:261:16
2018-04-09 10:38:12.725 58f05b19 at _callback (/var/www/node_modules/cos-nodejs-sdk-v5/sdk/util.js:295:25)
2018-04-09 10:38:12.725 58f05b19 at /var/www/node_modules/cos-nodejs-sdk-v5/sdk/base.js:1494:20
有没有demo?
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.