Skip to content

Commit 1a40126

Browse files
committed
getObject、selectObjectContent 支持 stream
1 parent 13cd713 commit 1a40126

File tree

7 files changed

+301
-33
lines changed

7 files changed

+301
-33
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ npm i cos-nodejs-sdk-v5 --save
1919
var COS = require('cos-nodejs-sdk-v5');
2020
// 创建实例
2121
var cos = new COS({
22-
SecretId: 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
22+
SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
2323
SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
2424
});
2525
// 分片上传

demo/demo.js

Lines changed: 131 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -723,17 +723,22 @@ function putObjectCopy() {
723723

724724
function getObject() {
725725
var filepath1 = path.resolve(__dirname, '1mb.out1.zip');
726-
var filepath2 = path.resolve(__dirname, '123/1mb.out2.zip');
727-
// cos.getObject({
728-
// Bucket: config.Bucket, // Bucket 格式:test-1250000000
729-
// Region: config.Region,
730-
// Key: '1mb.zip',
731-
// onProgress: function (progressData) {
732-
// console.log(JSON.stringify(progressData));
733-
// }
734-
// }, function (err, data) {
735-
// fs.writeFileSync(filepath1, data.Body);
736-
// });
726+
var filepath2 = path.resolve(__dirname, '1mb.out2.zip');
727+
var filepath3 = path.resolve(__dirname, '1mb.out3.zip');
728+
729+
// file1 获取对象字节到内存变量
730+
cos.getObject({
731+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
732+
Region: config.Region,
733+
Key: '1mb.zip',
734+
onProgress: function (progressData) {
735+
console.log(JSON.stringify(progressData));
736+
}
737+
}, function (err, data) {
738+
fs.writeFileSync(filepath1, data.Body);
739+
});
740+
741+
// file2 获取对象到本地文件
737742
cos.getObject({
738743
Bucket: config.Bucket, // Bucket 格式:test-1250000000
739744
Region: config.Region,
@@ -745,6 +750,19 @@ function getObject() {
745750
}, function (err, data) {
746751
console.log(err || data);
747752
});
753+
754+
// file3 pipe 格式获取对象到本地文件
755+
var stream = cos.getObjectStream({
756+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
757+
Region: config.Region,
758+
Key: '1mb.zip',
759+
onProgress: function (progressData) {
760+
console.log(JSON.stringify(progressData));
761+
}
762+
}, function (err, data) {
763+
console.log(err || data);
764+
});
765+
stream.pipe(fs.createWriteStream(filepath3))
748766
}
749767

750768
function headObject() {
@@ -845,6 +863,92 @@ function restoreObject() {
845863
});
846864
}
847865

866+
var selectCsvOpt = {
867+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
868+
Region: config.Region,
869+
Key: '1.csv',
870+
SelectType: 2,
871+
SelectRequest: {
872+
// Expression: "select * from cosobject s limit 100",
873+
Expression: "Select * from COSObject",
874+
ExpressionType: "SQL",
875+
InputSerialization: {
876+
CSV: {
877+
FileHeaderInfo: "IGNORE",
878+
RecordDelimiter: "\\n",
879+
FieldDelimiter: ",",
880+
QuoteCharacter: "\"",
881+
QuoteEscapeCharacter: "\"",
882+
Comments: "#",
883+
AllowQuotedRecordDelimiter: "FALSE"
884+
}
885+
},
886+
OutputSerialization: {
887+
CSV: {
888+
QuoteFields: "ASNEEDED",
889+
RecordDelimiter: "\\n",
890+
FieldDelimiter: ",",
891+
QuoteCharacter: "\"",
892+
QuoteEscapeCharacter: "\""
893+
}
894+
},
895+
RequestProgress: {
896+
Enabled: "FALSE"
897+
}
898+
},
899+
};
900+
901+
var selectJsonOpt = {
902+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
903+
Region: config.Region,
904+
Key: '1.json',
905+
SelectType: 2,
906+
SelectRequest: {
907+
Expression: "Select * from COSObject",
908+
ExpressionType: "SQL",
909+
InputSerialization: {
910+
JSON: {
911+
Type: "DOCUMENT",
912+
},
913+
},
914+
OutputSerialization: {
915+
JSON: {
916+
RecordDelimiter: "\n"
917+
},
918+
},
919+
RequestProgress: {
920+
Enabled: "FALSE"
921+
}
922+
},
923+
};
924+
925+
function selectObjectContentStream() {
926+
// 查询 JSON
927+
var selectStream = cos.selectObjectContentStream({
928+
...selectJsonOpt,
929+
// DataType: 'raw',
930+
}, function (err, data) {
931+
console.log(err || data);
932+
});
933+
var outFile = './result.txt';
934+
selectStream.pipe(fs.createWriteStream(outFile));
935+
selectStream.on('end', () => console.log(fs.readFileSync(outFile).toString()))
936+
}
937+
938+
selectObjectContent()
939+
function selectObjectContent() {
940+
// // 如果返回结果很大,可以用 selectObjectContentStream 处理
941+
// // 查询 CSV
942+
// cos.selectObjectContent(selectCsvOpt, function (err, data) {
943+
// console.log(err || data);
944+
// });
945+
946+
// 查询 JSON
947+
cos.selectObjectContent(selectJsonOpt, function (err, data) {
948+
console.log(err || data);
949+
});
950+
}
951+
848952
function abortUploadTask() {
849953
cos.abortUploadTask({
850954
Bucket: config.Bucket, /* 必须 */ // Bucket 格式:test-1250000000
@@ -1113,9 +1217,9 @@ function deleteFolder() {
11131217
// getBucketLifecycle();
11141218
// putBucketLifecycle();
11151219
// deleteBucketLifecycle();
1220+
// putBucketVersioning();
11161221
// getBucketVersioning();
11171222
// listObjectVersions();
1118-
// putBucketVersioning();
11191223
// getBucketReplication();
11201224
// putBucketReplication();
11211225
// deleteBucketReplication();
@@ -1124,9 +1228,19 @@ function deleteFolder() {
11241228
// deleteBucketWebsite();
11251229
// putBucketReferer();
11261230
// getBucketReferer();
1231+
// putBucketDomain()
1232+
// getBucketDomain()
1233+
// deleteBucketDomain()
1234+
// putBucketLogging()
1235+
// getBucketLogging()
1236+
// deleteBucketLogging()
1237+
// putBucketInventory()
1238+
// getBucketInventory()
1239+
// deleteBucketInventory()
1240+
// listBucketInventory()
11271241
// deleteBucket();
1128-
// putObject();
11291242
// putObjectCopy();
1243+
// getObjectStream();
11301244
// getObject();
11311245
// headObject();
11321246
// putObjectAcl();
@@ -1135,11 +1249,14 @@ function deleteFolder() {
11351249
// deleteMultipleObject();
11361250
// restoreObject();
11371251
// abortUploadTask();
1252+
// selectObjectContentStream();
1253+
// selectObjectContent();
11381254
// sliceUploadFile();
1255+
// uploadFiles();
11391256
// cancelTask();
11401257
// pauseTask();
11411258
// restartTask();
1142-
// uploadFiles();
1259+
// putObject();
11431260
// sliceCopyFile();
11441261
// uploadFolder();
11451262
// listFolder();

demo/util.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var os = require('os');
22
var fs = require('fs');
3-
var platform = os.platform();
43

4+
var platform = os.platform();
55
var createFile = function (filepath, size, callback) {
66
var cb = function (err) {
77
callback && callback();

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cos-nodejs-sdk-v5",
3-
"version": "2.8.2",
3+
"version": "2.8.3",
44
"description": "cos nodejs sdk v5",
55
"main": "index.js",
66
"scripts": {

sdk/advance.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ function getUploadIdAndPartList(params, callback) {
277277
Region: Region,
278278
Key: Key,
279279
Headers: util.clone(params.Headers),
280+
Query: util.clone(params.Query),
280281
StorageClass: StorageClass,
281282
}, params);
282283
self.multipartInit(_params, function (err, data) {

0 commit comments

Comments
 (0)