Skip to content

Commit e70dc9e

Browse files
committed
feat(File): support Stream in node
1 parent 39b7a3d commit e70dc9e

File tree

4 files changed

+73
-40
lines changed

4 files changed

+73
-40
lines changed

src/file.js

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ const parseBase64 = require('./utils/parse-base64');
1111

1212
module.exports = function(AV) {
1313

14-
// 挂载一些配置
15-
let avConfig = AV._config;
16-
1714
const hexOctet = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
1815

1916
// port from browserify path module
@@ -113,6 +110,22 @@ module.exports = function(AV) {
113110
this._extName = '';
114111
this._data = data;
115112

113+
if (process.env.CLIENT_PLATFORM === 'ReactNative' || process.env.CLIENT_PLATFORM === 'Weapp') {
114+
if (data && data.blob) {
115+
this._extName = extname(data.blob.uri);
116+
}
117+
}
118+
119+
if (typeof File !== "undefined" && data instanceof File && data.name) {
120+
this._extName = extname(data.name);
121+
}
122+
123+
if (!process.env.CLIENT_PLATFORM) {
124+
if (data instanceof require('stream')) {
125+
this._extName = extname(data.path);
126+
}
127+
}
128+
116129
let owner;
117130
if (data && data.owner) {
118131
owner = data.owner;
@@ -455,47 +468,41 @@ module.exports = function(AV) {
455468
if (!data.blob.name) {
456469
data.blob.name = this.get('name');
457470
}
458-
if (process.env.CLIENT_PLATFORM === 'ReactNative' || process.env.CLIENT_PLATFORM === 'Weapp') {
459-
this._extName = extname(data.blob.uri);
460-
}
461471
return data.blob;
462472
}
463473
if (typeof File !== "undefined" && data instanceof File) {
464474
if (data.size) {
465475
this.attributes.metaData.size = data.size;
466476
}
467-
if (data.name) {
468-
this._extName = extname(data.name);
469-
}
470477
return data;
471478
}
479+
if (!process.env.CLIENT_PLATFORM) {
480+
if (data instanceof require('stream')) {
481+
return data;
482+
}
483+
}
472484
if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) {
473485
this.attributes.metaData.size = data.length;
474486
return data;
475487
}
476488
throw new TypeError('malformed file data');
477489
}).then(data => {
478-
let uploadPromise;
479490
switch (uploadInfo.provider) {
480491
case 's3':
481-
uploadPromise = s3(uploadInfo, data, this, options);
482-
break;
492+
return s3(uploadInfo, data, this, options);
483493
case 'qcloud':
484-
uploadPromise = cos(uploadInfo, data, this, options);
485-
break;
494+
return cos(uploadInfo, data, this, options);
486495
case 'qiniu':
487496
default:
488-
uploadPromise = qiniu(uploadInfo, data, this, options);
489-
break;
497+
return qiniu(uploadInfo, data, this, options);
490498
}
491-
return uploadPromise.then(
492-
tap(() => this._callback(true)),
493-
(error) => {
494-
this._callback(false);
495-
throw error;
496-
}
497-
);
498-
});
499+
}).then(
500+
tap(() => this._callback(true)),
501+
(error) => {
502+
this._callback(false);
503+
throw error;
504+
}
505+
);
499506
});
500507
} else if (this.attributes.url && this.attributes.metaData.__source === 'external') {
501508
// external link file.

src/uploader/s3.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
const request = require('superagent');
2-
const AVPromise = require('../promise');
2+
const Promise = require('../promise');
3+
4+
const handleError = (error, res) => {
5+
if (res) {
6+
error.statusCode = res.status;
7+
error.responseText = res.text;
8+
error.response = res.body;
9+
}
10+
return error;
11+
};
312

413
module.exports = function upload(uploadInfo, data, file, saveOptions = {}) {
514
file.attributes.url = uploadInfo.url;
@@ -9,20 +18,19 @@ module.exports = function upload(uploadInfo, data, file, saveOptions = {}) {
918
// 海外节点,针对 S3 才会返回 upload_url
1019
const req = request('PUT', uploadInfo.upload_url)
1120
.set('Content-Type', file.get('mime_type'))
12-
.send(data);
1321
if (saveOptions.onprogress) {
1422
req.on('progress', saveOptions.onprogress);
1523
}
16-
req.end((err, res) => {
17-
if (err) {
18-
if (res) {
19-
err.statusCode = res.status;
20-
err.responseText = res.text;
21-
err.response = res.body;
22-
}
23-
return reject(err);
24-
}
25-
resolve(file);
24+
req.on('response', (res) => {
25+
if (res.ok) return resolve(file);
26+
reject(handleError(res.error, res));
2627
});
28+
req.on('error', (err, res) => reject(handleError(err, res)));
29+
if (require('stream') && data instanceof require('stream')) {
30+
// data.pipe(req);
31+
throw new TypeError('Saving an AV.File from a Stream to S3 is not yet supported');
32+
} else {
33+
req.send(data).end();
34+
}
2735
});
2836
};

test/file.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe('File', function() {
1111
describe('Saving base64', function() {
1212
it('should be saved', function() {
1313
var base64 = 'd29ya2luZyBhdCBhdm9zY2xvdWQgaXMgZ3JlYXQh';
14-
var file = new AV.File('myfile.txt', { base64: base64 });
14+
var file = new AV.File('base64.txt', { base64: base64 });
1515
file.metaData('format', 'txt file');
1616
file.setACL(new AV.ACL());
1717
return file.save().then(function() {
@@ -28,7 +28,7 @@ describe('File', function() {
2828

2929
it('should be saved', function(done) {
3030
var base64 = 'R0lGODlhGAAYAPf/AFuktf7bPEeVu8G9kHxvRfTYmEKe0Ku5cluZqdLDqv/9w//1dHOhm6aoZpvL5Y19WER+l//4mG2Wpf/sYoipieq8W/K1ItarcGBYPZeNUPXLX+bbzsnj88G+s/zRM+mrJ0CGp+3XtP79+vbObbeFS1qlxcKoOzuMtoW1moikfJuWZVqDknOVh8K4XoOppUmh06mxatfOxmylomWLmD2d06zAeYSKc//8ufa+MjmWyVd6fP/1hmmcmrPZ71KbtGqkt7LNt3CspP/+/v3MK4VwN/q+HrqXNuvm4qaYTO3jcfzDIv7jSNGykf7dQXl1Yuy1N/z59HO54YeddPXCMnOReqS0ijSZ0//pU//lSXOWlfzVPLN3K3GLdpvAtVep2P/vXvrKM//+/IyzuuulF0+gxf/hRq3FgIa7poKrkfOtFpiMa//QLYiwwqrLmsSLOZmVhonE5XGwqqKsdv/lTczh12mryLaxo/Xz8f/mUtXq9Za3rP/wb4ivrvXAPPa1Ga3MjP/+0oCZhPn5+DSa1Jejc//qWZuBM2az33yAbXi0wzOY0nOMh1pmZ//0fPvGLNjQx2OGhZ7CnGdfSkqEmyKR0e/t6XGzsMHe7/ayFKtkD9q8XsiDIrPR0ExeYv/uW0OOtOCmK1KOpV9HKun0+sGuRJeqil43F5KZcJO3isXTwPnGNbawkXNoQP7EIIKNgr+kPIWWkmGt2HOhtPfIT01rccK0T7urh6GciqO4lF2TnPTBLPv27ZnDzJm3uHi42P/rXm+rx3JVL62nmf7IJV59eGiutfnAI63IhoJSI8fEupC8nKChZPX6/bqbUOfi3uKZFk2Rr3FJJGJva5WtpafFiafBgU5yephOEl0jAIczAPvop/39/Pztzv/XN9yhM11/ffi3G3hBGNecON+tT+G9jZCMfb+WZuKoL//jTfe7HtOhUcGgMoR/a9CdUeCbKk1la2OAds2ACdqSH6VaI93Db8StgTib0/j8/mqQkpqtkTWXzrnQpNPc3////zKZ1AAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDNTc1QkFGRkI2QzVFMTExOUFFOUZDNDg5RkU1OEU3MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpERDg2RUU1M0Q3OTExMUUxQjUzMUM1MEJBNjZEN0RBOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpERDg2RUU1MkQ3OTExMUUxQjUzMUM1MEJBNjZEN0RBOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM3NzVCQUZGQjZDNUUxMTE5QUU5RkM0ODlGRTU4RTcwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkM1NzVCQUZGQjZDNUUxMTE5QUU5RkM0ODlGRTU4RTcwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3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';
31-
var file = new AV.File('myfile.gif', {
31+
var file = new AV.File('base64.gif', {
3232
base64: base64
3333
});
3434
file.save().then(function(data) {
@@ -64,7 +64,7 @@ describe('File', function() {
6464
if(typeof Buffer !== 'undefined'){
6565
describe('Saving buffer in node.js', function() {
6666
it('should be saved', function() {
67-
var file = new AV.File('myfile.txt', new Buffer('hello world'));
67+
var file = new AV.File('buffer-test', new Buffer('hello world'));
6868
return file.save().then(function() {
6969
expect(file.size()).to.be(11);
7070
expect(file.ownerId()).to.be.ok();
@@ -73,8 +73,25 @@ describe('File', function() {
7373
});
7474
});
7575
});
76-
}
7776

77+
describe('Saving stream in node.js', function() {
78+
if (process.env.REGION === 'us') {
79+
it('should throw in us region', () => {
80+
return new AV.File('stream-test', require('fs').createReadStream(__filename))
81+
.save().should.be.rejectedWith(/not yet supported/);
82+
});
83+
} else {
84+
it('should be saved', function() {
85+
var file = new AV.File('stream-test', require('fs').createReadStream(__filename));
86+
return file.save().then(function() {
87+
expect(file.ownerId()).to.be.ok();
88+
expect(file.id).to.be.ok();
89+
return file.destroy({ useMasterKey: true });
90+
});
91+
});
92+
}
93+
});
94+
}
7895

7996
describe('Saving array', function() {
8097
it('should be saved', function() {

webpack/common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ exports.create = () => ({
1919
node: {
2020
// do not polyfill Buffer
2121
Buffer: false,
22+
Stream: false,
2223
process: false,
2324
},
2425
module: {

0 commit comments

Comments
 (0)