NodeJS:发送/上传本地文件到远程服务器

我已经使用Winston模块为我的离线应用程序创build每日日志文件。 我现在需要能够通过POST发送或上传该文件到远程服务器(该部分已经存在)

我知道我需要写块文件,所以它不占用内存,所以我使用fs.createReadStream但是我似乎只得到一个503响应,即使只发送示例文本。

编辑

我发现接收者期望数据被命名为“数据”。 我已经删除了createReadSteam,因为我只能使用“application / x-www-form-urlencoded”和一个同步的fs.readFileSync 。 如果我在php服务器上将其更改为“multipart / form-data”,我可以再次使用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() 

       

网上收集的解决方案 "NodeJS:发送/上传本地文件到远程服务器"

https://github.com/mikeal/request#forms复&#x5236;

 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'))) 

看看请求模块。

它将为您提供将文件stream式传输到POST请求的能力。