poster
Version:
node.js module for streaming local/remote files over multipart.
72 lines (64 loc) • 1.77 kB
JavaScript
var poster = require('../index.js');
var http = require('http');
var assert = require('assert');
var crypto = require('crypto');
var formidable = require('formidable');
var server = http.createServer(function(req, res) {
var md5hash = crypto.createHash('md5');
var form = new formidable.IncomingForm();
var fields = {};
var file;
//mutlipart parsing events
form.on('field', function(field, value) {
fields[field] = value;
});
form.on('end', function() {
//validate fields
for(var field in options.fields) {
assert.ok(fields[field], field + ' is missing.');
assert.strictEqual(fields[field], options.fields[field], field + ' value do not match.');
}
//validate file
assert.strictEqual(file.filename, 'addams11-hp.jpg');
assert.strictEqual(file.mime, 'image/jpeg');
assert.strictEqual(md5hash.digest('hex'), '3a96612c62577bd5f56fb153a2cbacf4');
//goodbye
res.writeHead(200);
res.end('{ "success": true }');
});
form.onPart = function(part) {
if (part.filename) {
file = part;
part.on('data', function(buffer) {
md5hash.update(buffer);
});
}
else {
form.handlePart(part);
}
};
form.parse(req);
});
var options = {
uploadUrl: 'http://localhost:8080',
method: 'POST',
fileId: 'file',
fileContentType: 'image/jpeg',
fields: {
'myfield': 'value',
'myfield2': 'value2'
}
};
//start listening
server.listen(8080, function() {
//upload remote file
poster.post('https://www.google.com/logos/2012/addams11-hp.jpg', options, function(err, data) {
server.close();
if (err) {
throw new Error(err);
}
//validate response
var json = JSON.parse(data);
assert.equal(json.success, true);
});
});