Подтвердить что ты не робот

NodeJS: отправка/загрузка локального файла на удаленный сервер

Я использовал модуль Winston для создания ежедневного файла журнала для своего автономного приложения. Теперь мне нужно иметь возможность отправлять или загружать этот файл на удаленный сервер через POST (эта часть уже существует)

Я знаю, что мне нужно записать файл в куски, чтобы он не зависал память, поэтому я использую fs.createReadStream, но я, кажется, получаю только ответ 503, даже если вы отправляете только образец текста.

ИЗМЕНИТЬ

Я выяснил, что приемник ожидал, что данные будут называться "данные". Я удалил createReadSteam, поскольку я мог только заставить его работать с "application/x-www-form-urlencoded" и синхронным fs.readFileSync. Если я изменю это на "multipart/form-data" на php-сервере, я смогу снова использовать createReadStream или это произойдет, только если я перейду на физическую загрузку json файла.

Я изучал node за последние пару недель, поэтому любые указатели были бы с благодарностью приняты.

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()
4b9b3361

Ответ 1

скопирован из 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')))

Ответ 2

Посмотрите модуль request.

Он предоставит вам возможность передавать файл в POST-запросы.