Skip to content

Commit 81e37cb

Browse files
committed
add crc32 check for form upload
1 parent 1e8bbc5 commit 81e37cb

File tree

3 files changed

+49
-33
lines changed

3 files changed

+49
-33
lines changed

examples/form_upload_simple.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,19 @@ var formUploader = new qiniu.form_up.FormUploader(config);
1818
var putExtra = new qiniu.form_up.PutExtra();
1919

2020
//bytes
21-
// formUploader.put(uploadToken, null, "hello", null, function(respErr,
22-
// respBody, respInfo) {
23-
// if (respErr) {
24-
// throw respErr;
25-
// }
26-
//
27-
// if (respInfo.statusCode == 200) {
28-
// console.log(respBody);
29-
// } else {
30-
// console.log(respInfo.statusCode);
31-
// console.log(respBody);
32-
// }
33-
// });
21+
formUploader.put(uploadToken, null, "hello", null, function(respErr,
22+
respBody, respInfo) {
23+
if (respErr) {
24+
throw respErr;
25+
}
26+
27+
if (respInfo.statusCode == 200) {
28+
console.log(respBody);
29+
} else {
30+
console.log(respInfo.statusCode);
31+
console.log(respBody);
32+
}
33+
});
3434

3535
//file
3636
formUploader.putFile(uploadToken, null, localFile, putExtra, function(respErr,

qiniu/conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ exports.FormMimeUrl = "application/x-www-form-urlencoded";
1919
exports.FormMimeJson = "application/json";
2020
exports.FormMimeRaw = "application/octet-stream";
2121
exports.RS_HOST = "http://rs.qiniu.com";
22-
exports.RPC_TIMEOUT = 60000; //60s
22+
exports.RPC_TIMEOUT = 120000; //120s
2323

2424
//proxy
2525
exports.RPC_HTTP_AGENT = null;

qiniu/storage/form.js

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function PutExtra(fname, params, mimeType, crc32, checkCrc) {
3131
this.checkCrc = checkCrc || 1;
3232
}
3333

34-
FormUploader.prototype.putStream = function(uploadToken, key, rsStream,
34+
FormUploader.prototype.putStream = function(uploadToken, key, fsStream,
3535
putExtra, callbackFunc) {
3636
putExtra = putExtra || new PutExtra();
3737
if (!putExtra.mimeType) {
@@ -42,7 +42,7 @@ FormUploader.prototype.putStream = function(uploadToken, key, rsStream,
4242
putExtra.fname = key ? key : 'fname';
4343
}
4444

45-
rsStream.on("error", function(err) {
45+
fsStream.on("error", function(err) {
4646
//callbackFunc
4747
callbackFunc(err, null, null);
4848
return;
@@ -63,8 +63,10 @@ FormUploader.prototype.putStream = function(uploadToken, key, rsStream,
6363
var accessKey = util.getAKFromUptoken(uploadToken);
6464
var bucket = util.getBucketFromUptoken(uploadToken);
6565
if (useCache) {
66-
var postForm = createMultipartForm(uploadToken, key, rsStream, putExtra);
67-
putReq(this.config, postForm, callbackFunc);
66+
createMultipartForm(uploadToken, key, fsStream, putExtra, function(
67+
postForm) {
68+
putReq(this.config, postForm, callbackFunc);
69+
});
6870
} else {
6971
zone.getZoneInfo(accessKey, bucket, function(err, cZoneInfo,
7072
cZoneExpire) {
@@ -78,9 +80,12 @@ FormUploader.prototype.putStream = function(uploadToken, key, rsStream,
7880
that.config.zoneExpire = cZoneExpire;
7981

8082
//req
81-
var postForm = createMultipartForm(uploadToken, key, rsStream,
82-
putExtra);
83-
putReq(that.config, postForm, callbackFunc);
83+
createMultipartForm(uploadToken, key, fsStream,
84+
putExtra,
85+
function(postForm) {
86+
console.log("uploading");
87+
putReq(that.config, postForm, callbackFunc);
88+
});
8489
});
8590
}
8691
}
@@ -116,29 +121,25 @@ function putReq(config, postForm, callbackFunc) {
116121
//
117122
FormUploader.prototype.put = function(uploadToken, key, body, putExtra,
118123
callbackFunc) {
119-
var rsStream = new Readable();
120-
rsStream.push(body);
121-
rsStream.push(null);
124+
var fsStream = new Readable();
125+
fsStream.push(body);
126+
fsStream.push(null);
122127

123128
putExtra = putExtra || new PutExtra();
124-
return this.putStream(uploadToken, key, rsStream, putExtra, callbackFunc)
129+
return this.putStream(uploadToken, key, fsStream, putExtra, callbackFunc)
125130
}
126131

127132
FormUploader.prototype.putWithoutKey = function(uploadToken, body, putExtra,
128133
callbackFunc) {
129134
return this.put(uploadToken, null, body, putExtra, callbackFunc);
130135
}
131136

132-
function createMultipartForm(uploadToken, key, rsStream, putExtra) {
137+
function createMultipartForm(uploadToken, key, fsStream, putExtra, callbackFunc) {
133138
var postForm = formstream();
134139
postForm.field('token', uploadToken);
135140
if (key) {
136141
postForm.field('key', key);
137142
}
138-
postForm.stream('file', rsStream, putExtra.fname, putExtra.mimeType);
139-
if (putExtra.crc32) {
140-
postForm.field('crc32', putExtra.crc32);
141-
}
142143

143144
//putExtra params
144145
for (var k in putExtra.params) {
@@ -147,7 +148,22 @@ function createMultipartForm(uploadToken, key, rsStream, putExtra) {
147148
}
148149
}
149150

150-
return postForm;
151+
var fileBody = [];
152+
fsStream.on('data', function(data) {
153+
fileBody.push(data);
154+
});
155+
156+
fsStream.on('end', function() {
157+
fileBody = Buffer.concat(fileBody);
158+
var bodyCrc32 = parseInt("0x" + getCrc32(fileBody));
159+
postForm.field('crc32', bodyCrc32);
160+
161+
var newFsStream = new Readable();
162+
newFsStream.push(fileBody);
163+
newFsStream.push(null);
164+
postForm.stream('file', newFsStream, putExtra.fname, putExtra.mimeType);
165+
callbackFunc(postForm);
166+
});
151167
}
152168

153169

@@ -160,7 +176,7 @@ function createMultipartForm(uploadToken, key, rsStream, putExtra) {
160176
FormUploader.prototype.putFile = function(uploadToken, key, localFile, putExtra,
161177
callbackFunc) {
162178
putExtra = putExtra || new PutExtra();
163-
var rsStream = fs.createReadStream(localFile);
179+
var fsStream = fs.createReadStream(localFile);
164180

165181
if (!putExtra.mimeType) {
166182
putExtra.mimeType = mime.lookup(localFile);
@@ -170,7 +186,7 @@ FormUploader.prototype.putFile = function(uploadToken, key, localFile, putExtra,
170186
putExtra.fname = path.basename(localFile);
171187
}
172188

173-
return this.putStream(uploadToken, key, rsStream, putExtra, callbackFunc);
189+
return this.putStream(uploadToken, key, fsStream, putExtra, callbackFunc);
174190
}
175191

176192
FormUploader.prototype.putFileWithoutKey = function(uploadToken, localFile,

0 commit comments

Comments
 (0)