我使用Winston模块为我的离线应用程序创建了一个每日日志文件。现在我需要能够通过POST将该文件发送或上传到远程服务器(这部分已经存在)。
我知道我需要分块写入文件,以避免占用内存,因此我正在使用fs.createReadStream,但是即使只发送示例文本,我似乎仍然只得到503响应。
编辑
我发现接收方希望数据被命名为“data”。我已经删除了createReadSteam,因为我只能使用“application/x-www-form-urlencoded”和同步的fs.readFileSync让它工作。如果我在php服务器上将其更改为“multipart/form-data”,那么我是否可以再次使用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()
curl
的工具上传文件,以确保远程服务器实际接受数据了吗?它可能会有application/json
内容类型的问题。另外,日志文件是否真的是JSON格式的? - robertklepContent-Type
为application/json
发送它,则该文件可能不会被视为“常规”上传。 如果您想进行常规上传,您应该考虑使用request
或至少form-data
,因为文件上传不是易于实现的。 - robertklep