Skip to content

Commit d30e3d2

Browse files
committed
fix(Uploader): use superagent to upload file directly
fix react native upload failure.
1 parent 18ade8d commit d30e3d2

File tree

6 files changed

+80
-61
lines changed

6 files changed

+80
-61
lines changed

package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@
1111
"test": "gulp test"
1212
},
1313
"dependencies": {
14+
"debug": "^2.2.0",
1415
"form-data": "^1.0.0-rc4",
1516
"localstorage-memory": "^1.0.1",
1617
"md5": "^2.0.0",
1718
"qiniu": "6.1.3",
18-
"superagent": "^1.8.3",
19+
"superagent": "^2.0.0-alpha.2",
1920
"underscore": "^1.8.3"
2021
},
2122
"devDependencies": {
2223
"babel-core": "^6.4.0",
2324
"babel-preset-es2015": "^6.3.13",
2425
"browser-sync": "^2.2.1",
2526
"browserify": "^11.0.1",
26-
"debug": "^2.1.1",
2727
"expect.js": "0.2.0",
2828
"gulp": "^3.8.10",
2929
"gulp-babel": "^6.1.1",
@@ -53,11 +53,9 @@
5353
"./src/uploader/qiniu.js": "./src/uploader/qiniu-browser.js",
5454
"./src/browserify-wrapper/localStorage.js": "./src/browserify-wrapper/localstorage-browser.js",
5555
"./src/browserify-wrapper/parse-base64.js": "./src/browserify-wrapper/parse-base64-browser.js",
56-
"./src/uploader/cos.js": "./src/uploader/cos-browser.js",
5756
"./dist/node/uploader/qiniu.js": "./dist/node/uploader/qiniu-browser.js",
5857
"./dist/node/browserify-wrapper/localStorage.js": "./dist/node/browserify-wrapper/localstorage-browser.js",
59-
"./dist/node/browserify-wrapper/parse-base64.js": "./dist/node/browserify-wrapper/parse-base64-browser.js",
60-
"./dist/node/uploader/cos.js": "./dist/node/uploader/cos-browser.js"
58+
"./dist/node/browserify-wrapper/parse-base64.js": "./dist/node/browserify-wrapper/parse-base64-browser.js"
6159
},
6260
"eslintConfig": {
6361
"env": {

src/ajax.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ module.exports = function _ajax(method, resourceUrl, data, headers = {}, onprogr
1919
.set(headers)
2020
.send(data)
2121
.end((err, res) => {
22-
debug(res.status, res.body, res.text);
22+
if (res) {
23+
debug(res.status, res.body, res.text);
24+
}
2325
if (err) {
24-
err.statusCode = res.status;
25-
err.responseText = res.text;
26-
err.response = res.body;
26+
if (res) {
27+
err.statusCode = res.status;
28+
err.responseText = res.text;
29+
err.response = res.body;
30+
}
2731
return promise.reject(err);
2832
}
2933
promise.resolve(res.body, res.status, res);

src/uploader/cos-browser.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/uploader/cos.js

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
1+
/**
2+
* 每位工程师都有保持代码优雅的义务
3+
* Each engineer has a duty to keep the code elegant
4+
**/
5+
16
'use strict';
2-
const FormData = require('form-data');
37

4-
const ajax = require('../ajax.js');
8+
const request = require('superagent');
59
const Promise = require('../promise');
6-
const debug = require('debug')('cos');
710

8-
module.exports =function upload(uploadInfo, data, file) {
11+
module.exports = function upload(uploadInfo, data, file, saveOptions = {}) {
912
file.attributes.url = uploadInfo.url;
1013
file._bucket = uploadInfo.bucket;
1114
file.id = uploadInfo.objectId;
12-
const uploadUrl = uploadInfo.upload_url;
13-
const body = new Buffer(data, 'base64');
14-
debug(uploadUrl, data);
15-
const formData = new FormData();
16-
formData.append('fileContent', body);
17-
formData.append('op', 'upload');
15+
const uploadUrl = uploadInfo.upload_url + "?sign=" + encodeURIComponent(uploadInfo.token);
1816

1917
const promise = new Promise();
2018

21-
const request = formData.submit(uploadUrl, function(err, res) {
22-
debug(err, res.statusCode);
23-
if (err) {
24-
promise.reject(err);
25-
} else {
19+
const req = request('POST', uploadUrl)
20+
.field('fileContent', data)
21+
.field('op', 'upload')
22+
.end((err, res) => {
23+
if (res) {
24+
debug(res.status, res.body, res.text);
25+
}
26+
if (err) {
27+
if (res) {
28+
err.statusCode = res.status;
29+
err.responseText = res.text;
30+
err.response = res.body;
31+
}
32+
return promise.reject(err);
33+
}
2634
promise.resolve(file);
27-
}
28-
});
29-
request.setHeader('Authorization', uploadInfo.token);
35+
});
36+
if (saveOptions.onprogress) {
37+
req.on('progress', saveOptions.onprogress);
38+
}
3039
return promise;
3140
};

src/uploader/qiniu-browser.js

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,39 @@
55

66
'use strict';
77

8-
const ajax = require('../ajax.js');
8+
const request = require('superagent');
9+
const Promise = require('../promise');
910

10-
module.exports = function upload(uploadInfo, data, file, saveOptions) {
11-
file.attributes.url = uploadInfo.url;
12-
file._bucket = uploadInfo.bucket;
13-
file.id = uploadInfo.objectId;
14-
//Get the uptoken to upload files to qiniu.
15-
const uptoken = uploadInfo.token;
16-
const formData = new FormData();
17-
formData.append('file', data);
18-
formData.append('name', file.attributes.name);
19-
formData.append('key', file._qiniu_key);
20-
formData.append('token', uptoken);
11+
module.exports = function upload(uploadInfo, data, file, saveOptions = {}) {
12+
file.attributes.url = uploadInfo.url;
13+
file._bucket = uploadInfo.bucket;
14+
file.id = uploadInfo.objectId;
15+
//Get the uptoken to upload files to qiniu.
16+
const uptoken = uploadInfo.token;
2117

22-
return ajax('POST', 'https://up.qbox.me', formData, undefined, saveOptions.onProgress)
23-
.then(() => file);
18+
const promise = new Promise();
19+
20+
const req = request('POST', 'https://up.qbox.me')
21+
.field('file', data)
22+
.field('name', file.attributes.name)
23+
.field('key', file._qiniu_key)
24+
.field('token', uptoken)
25+
.end((err, res) => {
26+
if (res) {
27+
debug(res.status, res.body, res.text);
28+
}
29+
if (err) {
30+
if (res) {
31+
err.statusCode = res.status;
32+
err.responseText = res.text;
33+
err.response = res.body;
34+
}
35+
return promise.reject(err);
36+
}
37+
promise.resolve(file);
38+
});
39+
if (saveOptions.onprogress) {
40+
req.on('progress', saveOptions.onprogress);
41+
}
42+
return promise;
2443
};

test/test.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,16 @@ if (typeof require !== 'undefined') {
77
GLOBAL.AV = require('../dist/node/av');
88
}
99

10-
AV._config.APIServerURL = 'https://cn-stg1.avoscloud.com';
10+
// AV._config.APIServerURL = 'https://cn-stg1.avoscloud.com';
11+
// AV.init({
12+
// appId: 'mxrb5nn3qz7drek0etojy5lh4yrwjnk485lqajnsgjwfxrb5',
13+
// appKey: 'd7sbus0d81mrum4tko4t8gl74b27vl0rh762ff7ngrb6ymmq',
14+
// masterKey: 'l0n9wu3kwnrtf2cg1b6w2l87nphzpypgff6240d0lxui2mm4'
15+
// });
1116
AV.init({
12-
appId: 'mxrb5nn3qz7drek0etojy5lh4yrwjnk485lqajnsgjwfxrb5',
13-
appKey: 'd7sbus0d81mrum4tko4t8gl74b27vl0rh762ff7ngrb6ymmq',
14-
masterKey: 'l0n9wu3kwnrtf2cg1b6w2l87nphzpypgff6240d0lxui2mm4'
17+
appId: '95TNUaOSUd8IpKNW0RSqSEOm-9Nh9j0Va',
18+
appKey: 'gNAE1iHowdQvV7cqpfCMGaGN',
19+
masterKey: 'ue9M9nqwD4MQNXD3oiN5rAOv'
1520
});
1621
AV.setProduction(true);
1722
AV._useMasterKey = true;

0 commit comments

Comments
 (0)