Request: рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреЗрд╡рд▓ рдорд╛рдирдХ рд░реАрдб рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рджрд┐рд╕ре░ 2016  ┬╖  26рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: request/request

рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЬреЛ рдЯреАрдПрдЖрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рд╣реИ (рдореИрдВ рдЯреАрдПрдЖрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tar-stream рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ ECONNRESET рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдереЛрдбрд╝реЗ рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ fs.createReadStream рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╣реА рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рднреА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ PassThrough рд╕реНрдЯреНрд░реАрдо рдХреЛ formData рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:

ERROR { Error: socket hang up
    at createHangUpError (_http_client.js:254:15)
    at Socket.socketOnEnd (_http_client.js:346:23)
    at emitNone (events.js:91:20)
    at Socket.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9) code: 'ECONNRESET' }

рд╕рд░реНрд╡рд░:

var http = require('http');

http.createServer(function (request, response) {                                                                                    
    request.on('data', function(chunk) {
      console.log(chunk.length);
    });    
    request.on('end', function() {
      response.writeHead(200, "OK", {'Content-Type': 'text/html'});
      response.end();
    });                                                           
}).listen(8077);

рдЧреНрд░рд╛рд╣рдХ:

var request = require('request');
var fs = require('fs');
var PassThrough = require('stream').PassThrough;

var rs = fs.createReadStream('some_file.bin'), pt = new PassThrough();  
rs.pipe(pt);    
request({
    'method': 'POST',
    'url': 'http://127.0.0.1:8077',
    'formData': {
        'uploaded_file': pt
    }
}, function (err, httpResponse, body)
{
    if (err)
        console.log('ERROR', err);
    else
        console.log({ 'statusCode': httpResponse.statusCode, 'body': body });
});

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рд╕реАрдзреЗ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рдкреНрд░рдХрд╛рд░, ...)

var formData = {
  'file': {
    value: buffer,
    options: {
      filename: file.filename,
      contentType: file.mimetype
    }
  }
}

https://github.com/form-data/form-data#alternative -submission-methods

рд╕рднреА 26 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрдм рдореИрдВ рдПрдХ рд╡реИрдз рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдарди рд╕реНрдЯреНрд░реАрдо рдореЗрдВ Buffer рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рднреА рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрд╛рдп рдорд┐рд▓рд╛ рд╣реИ? рд╢рд╛рдпрдж рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЧ рд╣реИ?

рдпрд╣рд╛рдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдмреЗрд╕ 64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдмреЗрд╕ 64 рдХреЛ рдПрдХ рдмрдлрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░, @ рдлрд┐рд▓рд┐рдк-рдЬрд╛рд╕реВрд╕ рдХреА рддрд░рд╣ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд░реАрдб рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдХреЛрдИ рдХрд╛рдордХрд╛рдЬ рдорд┐рд▓рд╛?

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ: рдЕрднреА рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб bhttp (https://www.npmjs.com/package/bhttp) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░реАрдо 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

рдореИрдВрдиреЗ рд╕реАрдзреЗ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рдкреНрд░рдХрд╛рд░, ...)

var formData = {
  'file': {
    value: buffer,
    options: {
      filename: file.filename,
      contentType: file.mimetype
    }
  }
}

https://github.com/form-data/form-data#alternative -submission-methods

@PierreCavalet , рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдореЗрд░рд╛ "рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб" рдмрд╕ request рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛ рдФрд░ рдиреЛрдбрдЬ http рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред

@PierreCavalet рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдмрдлрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдиреНрдХреЛрдбреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рд╣реИ? рдореЗрд░реЗ рд▓рд┐рдП рдмрдлрд░ рдПрдХ рдмрд╛рдЗрдирд░реА рдмреНрд▓реЙрдм рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдареАрдХ рд╕реЗ рдПрдиреНрдХреЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рдмрд╕ рдПрдХ рдЧрд▓рдд рд╕рд╛ рдСрдлрд╕реЗрдЯ ?! рд╡реИрд╕реЗ рднреА рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдПрдХ рдЕрдорд╛рдиреНрдп рдмрд╛рдЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░реНрд╡рд░ рдерд╛ред

@ philipp-spiess рдореЗрд░рд╛ рдмрдлрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

Buffer.from(base64string, 'base64')

рддреЛ рд╣рд╛рдБ рдпрд╣ рдПрдХ рдмрд╛рдЗрдирд░реА рдмреНрд▓реЙрдм рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирдпрд╛ рдмрдлрд╝рд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреА рдЧрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╡рд░реНрдг рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред

@PierreCavalet Buffer рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рд╕реАрдзреЗ multer рд╕реЗ рдерд╛, express рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдорд┐рдбрд▓рд╡реЗрдпрд░ред

@ рдлрд┐рд▓рд┐рдк-рдЬрд╛рд╕реВрд╕ рдпрд╣ рдЕрдЬреАрдм рд╣реИред рдореЗрд░реА рдмреЗрд╕ 64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдмрдлрд░ рдХреЗ рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ, рдФрд░ рдпрд╣ рдмрдлрд░ рд╕реАрдзреЗ рдореЗрд░реА рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рд╕реЗ рд╣реИред (рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдХ рдЕрдиреНрдп рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо "рдХреБрдЫ рднреА рдирд╣реАрдВ" рдХреЗ рд▓рд┐рдП "рдПрдиреНрдХреЛрдб рдФрд░ рдбреАрдХреЛрдб" рдХрд░рддреЗ рд╣реИрдВ)ред рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@samkelly bhttp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрдкрдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

@ bchr02 рдЬреИрд╕реЗ!

рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛: рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдХреЗ _length_retriever рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЧрдИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╣реИ рдЬреЛ 3 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ (рдореВрд▓ рд░реВрдк рд╕реЗ fd рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ, HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ) рддреЛ рдЖрдкрдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рд╕реЗ рдЭреВрда рдмреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ рд╕рд╣реА рдмрд╛рдд (рдФрд░ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рдЯреАрдХ рдмрд╛рдЗрдЯ рд▓рдВрдмрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛:

var buffer = Buffer.from(base64string, 'base64');
buffer['httpVersion'] = true;
buffer.headers = { 'content-length': 64 }
var formData = {
  'file': {
    value: buffer,
    options: {
      filename: file.filename,
      contentType: file.mimetype
    }
  }
}

рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдЖрдкрдХреЛ filename рдлрд╝реАрд▓реНрдб рдХреЛ options рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдХреА рдмрд╛рдЗрдЯ рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде options.knownLength рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдлреЙрд░реНрдордбрд╛рдЯрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдлреЙрд░реНрдордбрд╛рдЯрд╛ рдХреЗ рд░реАрдбрдореА рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдЕрднреА рддрдХ рдХрд╣реАрдВ рднреА рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдЖрд╣, рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛: рдореБрдЭреЗ 2 рдмрдЬреЗ рдХреЛрдИ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдПрдВред рдореИрдВ рд╢рдкрде рд▓реЗ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдЬреНрдЮрд╛рдд рд▓рдореНрдмрд╛рдИ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдХреА рдХрдореА рдЕрд░рд╛рдЬрдХрддрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реЛред

рдпрд╣ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдЕрдкрд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдХ gzip рд╕реНрдЯреНрд░реАрдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред

@ sam0x17 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдиреБрд░реЛрдз рд╡рд░реНрддрдорд╛рди рдореЗрдВ transfer-encoding: chunked рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ bhttp рдХрд╛ рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧред

рдпрд╣ рд╕рднреА рджреЗрдЦреЗрдВ

рдирд┐рд╢рд╛рди

рдореБрдЭреЗ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рд╕реАрдзреЗ http рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░рд╛ рдХрд╛рдордХрд╛рдЬ рдпрд╣рд╛рдВ рд╣реИред

const streamSample = fs.createReadStream('data.csv').pipe(passThrough);

const formHTTP = new FormData();
formHTTP.append('sampleFieldText', 'text-sample');
formHTTP.append('myFile', streamSample);

const requestToSend = http.request({
    method: 'post',
    host: 'localhost',
    path: '/http',
    headers: formHTTP.getHeaders()
});

formHTTP.pipe(requestToSend);

requestToSend.on('response', (res) => {
    console.log('HTTP response', res.statusCode);
});

requestToSend.on('error', (e) => {
    console.log('ERROR HTTP', e);
});

@рдмреЗрдВрдЬрдбреА90
рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░реАрдо рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдореИрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрд░ рдкрд░ рдорд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ рд╣реИред

@Ncifra рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╣рд░ рд░реЛрдЬ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реВрдВред
рдЖрдк https://beeceptor.com/ рдкрд░ рдЕрдкрдиреА рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;)

рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛: https://github.com/form-data/form-data/issues/356#issue -234978025
рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрд░рд╛ рдореВрд▓ рдореБрджреНрджрд╛ рд╣реИ: https://github.com/form-data/form-data/issues/409

@ BenjD90 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВрдиреЗ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд┐рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕ рдкрд░ рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд▓рдВрдмрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдереАред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд░рд▓ рдХреЛрдб рдмрдирд╛рдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдереА, рд▓реЗрдХрд┐рди рдорд▓реНрдЯреАрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдЧреИрд░ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рдереЗред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@stale рдпрд╣ рдмрдЧ рд╕реНрдЯреАрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕реЗ ^^ . рдХреЗ рджрд┐рди рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╣рд╛рдБ рд╕рд╣рдордд, рдпрд╣ рдЕрдм рдЙрддрдирд╛ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рддрдм рдерд╛ред рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ request рдХреЗ рдмрдЬрд╛рдп bhttp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рдареАрдХ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рд╕реНрдЯреНрд░реАрдо рдФрд░ рд╕реНрдЯреНрд░реАрдо2 рдПрдкреАрдЖрдИ рдХреА рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ request рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

svlungade picture svlungade  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lupo9557 picture lupo9557  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

crostine picture crostine  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pixarfilmz112 picture pixarfilmz112  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

xin7c picture xin7c  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ