2016-06-08 2 views
1

노드 http 모듈 (타사 라이브러리 없음)을 사용하여 파일을 원격 서버에 업로드하려면 어떻게합니까? 노드가있는 파일 업로드 http 모듈

나는 다음을 시도하지만 (내가 서버에서 데이터를 얻을 수 없음) 작동하지 않습니다 :

function writeBinaryPostData(req, filepath) { 
    var fs = require('fs'); 

    var boundaryKey = Math.random().toString(16); // random string 
    var boundaryStart = `--${boundaryKey}\r\n`, 
     boundaryEnd = `\r\n--${boundaryKey}--`, 
     contentDispositionHeader = 'Content-Disposition: form-data; name="file" filename="file.txt"\r\n', 
     contentTypeHeader = 'Content-Type: application/octet-stream\r\n', 
     transferEncodingHeader = 'Content-Transfer-Encoding: binary\r\n'; 

    var contentLength = Buffer.byteLength(
     boundaryStart + 
     boundaryEnd + 
     contentDispositionHeader + 
     contentTypeHeader + 
     transferEncodingHeader 
    ) + fs.statSync(filepath).size; 

    var contentLengthHeader = `Content-Length: ${contentLength}\r\n`; 

    req.setHeader('Content-Length', contentLength); 
    req.setHeader('Content-Type', 'multipart/form-data; boundary=' + boundaryKey); 

    req.write(
     boundaryStart + 
     contentTypeHeader + 
     contentDispositionHeader + 
     transferEncodingHeader 
    ); 

    fs.createReadStream(filepath, { bufferSize: 4 * 1024 }) 
     .on('data', (data) => { 
      req.write(data); 
     }) 
     .on('end',() => { 
      req.write(boundaryEnd); 
      req.end(); 
     }); 
} 

답변

4
나는 그것이 다음 코드를 사용하여 작업있어

: 내가 찾은 코드를 기반으로

function writeBinaryPostData(req, filepath) { 
    var fs = require('fs'), 
     data = fs.readFileSync(filepath); 

    var crlf = "\r\n", 
     boundaryKey = Math.random().toString(16), 
     boundary = `--${boundaryKey}`, 
     delimeter = `${crlf}--${boundary}`, 
     headers = [ 
      'Content-Disposition: form-data; name="file"; filename="test.txt"' + crlf 
     ], 
     closeDelimeter = `${delimeter}--`, 
     multipartBody; 


    multipartBody = Buffer.concat([ 
     new Buffer(delimeter + crlf + headers.join('') + crlf), 
     data, 
     new Buffer(closeDelimeter)] 
    ); 

    req.setHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); 
    req.setHeader('Content-Length', multipartBody.length); 

    req.write(multipartBody); 
    req.end(); 
} 

here