, POST, Content-Type: multipart/form-data;boundary=myboundary. write() - (linebreaks \r\n):
--myboundary
Content-Disposition: form-data; name="field_name"
field_value
write() - :
--myboundary
Content-Disposition: form-data; name="file"; filename="urlencoded_filename.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
binary_file_data
binary_file_data pipe():
var fileStream = fs.createReadStream("path/to/my/file.jpg");
fileStream.pipe(requestToGoogle, {end: false});
fileStream.on('end, function() {
req.end("--myboundary--\r\n\r\n");
});
{end: false} pipe(), , . -- .
, Google content-length ( ). , POST POST Google, , content-length, .
content-length . - Buffer.byteLength(body) , , , . :
var body_before_file = "...";
var body_after_file = "--myboundary--\r\n\r\n";
var fs = require('fs');
fs.stat(local_path_to_file, function(err, file_info) {
var content_length = Buffer.byteLength(body_before_file) +
file_info.size +
Buffer.byteLength(body_after_file);
, - Google, , .
... , , PUT . https://developers.google.com/storage/docs/reference-methods#putobject transfer-encoding: chunked, . , , pipe() , . https://github.com/felixge/node-formidable , - :
incomingForm.onPart = function(part) {
if (part.filename) {
var req = ...
part.pipe(req);
} else {
incomingForm.handlePart(part);
}
}