NodeJS: versenden/hochladen einer lokalen Datei zu einem remote-server
Habe ich die Winston-Modul zum erstellen einer täglichen Protokolldatei für mein offline-app. Ich brauche jetzt in der Lage sein zu senden oder hochzuladen, die Datei zu einem remote-server via POST (Teil schon vorhanden)
Ich weiß, ich muss zum schreiben der Datei in Blöcken, so dass es nicht hog die Speicher, so bin ich mit fs.createReadStream jedoch habe ich anscheinend nur eine 503-Antwort, selbst wenn das senden nur text.
BEARBEITEN
Arbeitete ich heraus, dass der Empfänger erwarten, dass die Daten mit dem Namen 'Daten'. Ich habe entfernt die createReadSteam wie konnte ich nur, dass es funktioniert mit 'application/x-www-form-urlencoded' und eine synchrone fs.readFileSync. Wenn ich ändern Sie diese auf "multipart/form-data' auf dem php-server würde ich in der Lage sein zu verwenden createReadStream wieder, oder ist das nur wenn ich körperlich hochladen der json-Datei.
Ich habe nur lernen Knoten für die letzten paar Wochen, also alle Zeiger wäre dankbar angenommen.
var http = require('http'),
fs = require('fs');
var post_options = {
host: 'logger.mysite.co.uk',
path: '/',
port: 80,
timeout: 120000,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
var sender = http.request(post_options, function(res) {
if (res.statusCode < 399) {
var text = ""
res.on('data', function(chunk) {
text += chunk
})
res.on('end', function(data) {
console.log(text)
})
} else {
console.log("ERROR", res.statusCode)
}
})
var POST_DATA = 'data={['
POST_DATA += fs.readFileSync('./path/file.log').toString().replace(/\,+$/,'')
POST_DATA += ']}'
console.log(POST_DATA)
sender.write(POST_DATA)
sender.end()
curl
um sicherzustellen, dass der remote-server akzeptiert tatsächlich die Daten? Sie haben möglicherweise Probleme mit der application/json
Inhalte geben. Außerdem ist das logfile tatsächlich im JSON-format?Möglicherweise haben Sie einen Punkt hier. Gibt es einen Unterschied zwischen hochladen einer json-Datei oder öffnen Sie eine json-Datei und versenden als POST-Daten-chunks (nicht tatsächlich senden der Datei)
Wenn Sie senden Sie es mit
application/json
als Content-Type
ist, kann die Datei nicht bekommen, behandelt, als ein "normaler" laden. Wenn Sie möchten, eine regelmäßige hochladen, sollten Sie erwägen, entweder request
oder zumindest form-data
, weil Datei-uploads sind nicht trivial zu implementieren.Ist das eigentlich das, was der server erwartet? Es sieht ziemlich komisch.
503 der server ist nicht verfügbar - ist der server down? checkupdown.com/status/E503.html
InformationsquelleAutor sidonaldson | 2013-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
kopiert von https://github.com/mikeal/request#forms
InformationsquelleAutor waqas
Haben Sie einen Blick auf die Anfrage Modul.
Es wird Ihnen die Fähigkeit zum streamen einer Datei zu POST-Anfragen.
Ich sehe, dass. Anfrage können Sie stream eine Datei auch direkt auf eine andere Anforderung. Ein Blick in die Dokumentation.
Aus den docs: fs.createReadStream('Datei.json').Rohr(request.put('mysite.com/obj.json'))
Ich bin damit einverstanden, dass
request
ist sehr schön, aber der remote-server wird zu werfen einen Anfall, weil der upload so glaube ich nicht einbauenhttp
mitrequest
das problem lösen 🙂 Der original-code, wenn auch ein bisschen verbose, sollte funktionieren.mit großen Modulen, die andere gemacht haben, ist auch Teil des Lernens Knoten 😉
InformationsquelleAutor swhitewvu24