web-dev-qa-db-fra.com

NodeJS: envoi/téléchargement d'un fichier local sur un serveur distant

J'ai utilisé le module Winston pour créer un fichier journal quotidien pour mon application hors connexion. Je dois maintenant pouvoir envoyer ou télécharger ce fichier sur un serveur distant via POST (cette partie existe déjà)

Je sais que j'ai besoin d'écrire le fichier en morceaux pour ne pas encombrer la mémoire, donc j'utilise fs.createReadStream mais il semble que je ne reçoive qu'une réponse 503, même si j'envoie uniquement du texte d'exemple.

MODIFIER

J'ai déterminé que le destinataire s'attendait à ce que les données soient nommées «données». J'ai supprimé le createReadSteam car je ne pouvais le faire fonctionner qu'avec 'application/x-www-form-urlencoded' et un synchrone fs.readFileSync . Si je change ceci en 'multipart/form-data' sur le serveur php, pourrais-je utiliser createReadStream à nouveau, ou est-ce uniquement si je passe au téléchargement physique du fichier json.

Je n’ai appris le nœud que ces deux dernières semaines pour que tous les pointeurs soient reçus avec gratitude.

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()
15
sidonaldson

copié de https://github.com/mikeal/request#forms

var r = request.post('http://service.com/upload', function optionalCallback (err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err);
  }
  console.log('Upload successful!  Server responded with:', body);
})
var form = r.form()
form.append('my_field1', 'my_value23_321')
form.append('my_field2', '123123sdas')
form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')))
9
waqas

Regardez le module request .

Cela vous donnera la possibilité de diffuser un fichier en streaming vers des requêtes POST.

0
swhitewvu24