2016-06-25 12 views
0

Ich habe eine Audiodatei, die ich zur Übersetzung an einen Server poste. Ich habe es geschafft, eine Anfrage im Postboten zu erstellen, aber ich weiß nicht, wie ich die Datei auf diesen Server schreiben soll. Unten ist der Code, den ich bisher bekommen haben: ofcourseNode JS binäre Datei auf einen anderen Server hochladen

var http = require("https"); 

var options = {} 

var req = http.request(options, function (res) { 
    var chunks = []; 

    res.on("data", function (chunk) { 
    chunks.push(chunk); 
    }); 

    res.on("end", function() { 
    var body = Buffer.concat(chunks); 
    console.log(body.toString()); 
    }); 
}); 

options{} gefüllt mit Methode/Hostname/Port. Im Postboten füge ich "binäre" Datei hinzu, aber ich kann nicht herausfinden, wie man eine Datei in die Anfrage in Knoten JS schreibt.

Antwort

0

Sie können das Anfragepaket für npm verwenden.

Installieren Sie das request Modul von npm: npm install request --save

dann das Anforderungsmodul verwenden, um Ihre Anfrage zu senden.

Weitere Informationen zur Implementierung finden Sie unter https://www.npmjs.com/package/request.

+0

Geben Sie ein reales Beispiel. Gerade jetzt ist es nur ein Kommentar – mplungjan

1

Eine Lösung, die leicht in Ihr aktuelles Programm ohne zu viel Arbeit passt, ist die Verwendung des Moduls form-data auf npm.

Das Formulardatenmodul vereinfacht mehrteilige Anforderungen im Knoten. Das folgende ist ein einfaches Beispiel für die Verwendung.

var http = require("https"); 
var FormData = require('form-data'); 
var fs = require('fs') 

var form = new FormData(); 
form.append('my_field', fs.createReadStream('my_audio.file')); 

var options = { 
    host: 'your.host', 
    port: 443, 
    method: 'POST', 
    // IMPORTANT! 
    headers: form.getHeaders() 
} 

var req = http.request(options, function (res) { 
    var chunks = []; 

    res.on("data", function (chunk) { 
    chunks.push(chunk); 
    }); 

    res.on("end", function() { 
    var body = Buffer.concat(chunks); 
    console.log(body.toString()); 
    }); 
}); 

// Pipe form to request 
form.pipe(req); 

In einem "realen" Szenario würden Sie viel mehr Fehlerprüfung durchführen wollen. Außerdem gibt es viele andere http-Clients auf npm, die diesen Prozess ebenfalls vereinfachen (das Anforderungsmodul verwendet Formulardaten BTW). Schauen Sie sich request und got an, wenn Sie interessiert sind.

Für das Senden einer binären Anfrage sind die Grundlagen immer noch die gleichen, req ist eine writable stream. Als solche können Sie pipe Daten in den Stream, oder schreiben Sie direkt mit req.write(data). Hier ist ein Beispiel.

var http = require('https'); 
var fs = require('fs'); 

var options = { 
    // ... 
    headers: { 
    'Content-Type': 'application/octet-stream' 
    } 
} 

var req = http.request(options, function (res) { 
    var chunks = []; 

    res.on("data", function (chunk) { 
    chunks.push(chunk); 
    }); 

    res.on("end", function() { 
    var body = Buffer.concat(chunks); 
    console.log(body.toString()); 
    }); 
}); 


var audioFile = fs.createReadStream('my_audio.file', { encoding: 'binary' }); 
audioFile.pipe(req); 

Beachten Sie, dass, wenn Sie die write Methode explizit req.write(data) verwenden Sie req.end() nennen müssen. Außerdem können Sie sich die Kodierungsoptionen für Nodes Buffer (docs) ansehen.

+0

Danke für die Hilfe. Leider akzeptiert der Server, auf den ich poste, keine Formulardaten, nur binäre Dateiübertragung. – Raymond

+0

Entschuldigung, ich missverstanden. Ich habe die Antwort bearbeitet, hoffe, es hilft. – Nindaff

+0

Danke, das ist die Lösung für mich – Raymond