Я использовал модуль Winston для создания ежедневного файла журнала для своего автономного приложения. Теперь я должен иметь возможность отправлять или загружать этот файл на удаленный сервер через POST (эта часть уже существует)NodeJS: отправка/загрузка локального файла на удаленный сервер
Я знаю, что мне нужно записать файл в куски, чтобы он не зависал память, поэтому я используя fs.createReadStream однако я, кажется, получаю только ответ 503, даже если отправляю только образец текста.
EDIT
Я работал, что приемник ожидал данные, которые будут названы «данные». Я удалил createReadSteam, поскольку я мог только заставить его работать с 'application/x-www-form-urlencoded' и синхронным fs.readFileSync. Если я изменю это на «multipart/form-data» на php-сервере, я смогу снова использовать createReadStream или это произойдет, только если я перейду на физическую загрузку json-файла.
Я только изучал узел в течение прошлых нескольких недель, поэтому любые указатели были бы с благодарностью приняты.
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', чтобы убедиться, что удаленный сервер фактически принимает данные? Это может иметь проблемы с типом содержимого 'application/json'. Кроме того, является ли файл журнала фактически в формате JSON? – robertklep
У вас может быть точка здесь. Есть ли разница между загрузкой json-файла или открытием json-файла и отправкой его в виде фрагментов данных POST (фактически не отправки файла) – sidonaldson
Если вы отправляете его с помощью 'application/json' как' Content-Type', файл может не быть обрабатываться как «регулярная» загрузка. Если вы хотите регулярную загрузку, вам следует рассмотреть возможность использования «запроса» или, по крайней мере, ['form-data'] (https://github.com/felixge/node-form-data), поскольку загрузка файлов не является тривиальной для реализации , – robertklep