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

sid*_*son 17 http node.js

我使用Winston模块为我的离线应用创建了每日日志文件.我现在需要能够通过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()
Run Code Online (Sandbox Code Playgroud)

kub*_*b1x 10

在无数次试验失败之后,这对我有用。将FormDatanode-fetch 一起使用。哦,顺便说一句,两天前不推荐使用请求

const FormData = require('form-data');
const fetch = require('node-fetch');

function uploadImage(imageBuffer) {
  const form = new FormData();
  form.append('file', imageBuffer, {
    contentType: 'image/jpeg',
    filename: 'dummy.jpg',
  });
  return fetch(`myserver.cz/upload`, { method: 'POST', body: form })
};
Run Code Online (Sandbox Code Playgroud)

imageBuffer 那里可以有无数的东西。我有一个包含图像的缓冲区,但您也可以传递fs.createReadStream('/foo/bar.jpg')从驱动器上传文件的结果 。


waq*_*qas 9

复制自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')))
Run Code Online (Sandbox Code Playgroud)


小智 -1

看一下请求模块。

它将使您能够将文件传输到 POST 请求。

  • @sidonaldson 使用其他人制作的优秀模块也是学习 Node 的一部分;) (2认同)