Javascript 通过require(“http”)请求将图像作为二进制文件发送到远程服务器

Javascript 通过require(“http”)请求将图像作为二进制文件发送到远程服务器,javascript,node.js,http-request,Javascript,Node.js,Http Request,我正在尝试从nodejs服务器向远程服务器发送一个映像。这是目前为止的请求格式 注意:就像邮递员中的二进制请求一样,选择文件并发送) 使用: var options = { hostname: "hostname", path: "/upload", port: 443, method: 'PUT', headers: { 'Accept': 'application/json', 'Content-Type': 'ima

我正在尝试从nodejs服务器向远程服务器发送一个映像。这是目前为止的请求格式

注意:就像邮递员中的二进制请求一样,选择文件并发送)


使用:

var options = {
    hostname: "hostname",
    path: "/upload",
    port: 443,
    method: 'PUT',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'image/png'
    }
};

fs.readFile('./img/thumbnail.png', function(error, data) {
     options.body = data;
     upload(options).then(...
});

编辑2

经过几次尝试,我们发现了一种通过流上传图像的有效策略,下面是它的外观,但仍然没有成功

const https = require('https');
var request = https.request(options, function(response) {
    var buffers = [];
    response.on('data', function(chunk) {
        buffers.push(chunk);
    });
    response.on('end', function(){
        console.log(response.headers['content-type']);
        var body = JSON.parse(buffers.length ? Buffer.concat(buffers).toString() : '""');
        response.statusCode >= 200 && response.statusCode < 300 ? resolve(body) : reject(body);
    });
}).on('error', function(error) {
    reject(error);
});

const fs = require('fs');
var readStream = fs.ReadStream(body.path);
readStream.pipe(request);
readStream.on('close', function(){
    request.end();
});
consthttps=require('https');
var request=https.request(选项、函数(响应){
var缓冲区=[];
响应.on('data',函数(块){
buffers.push(块);
});
on('end',function(){
log(response.headers['content-type']);
var body=JSON.parse(buffers.length?Buffer.concat(buffers.toString():'“”);
response.statusCode>=200&&response.statusCode<300?解析(正文):拒绝(正文);
});
}).on('error',函数(error){
拒绝(错误);
});
常数fs=要求('fs');
var readStream=fs.readStream(body.path);
readStream.pipe(请求);
readStream.on('close',function(){
request.end();
});

我想你只是想要这个:

fs.createReadStream('./img/thumbnail.png').pipe(https.request({
  hostname: 'hostname',
  path: '/upload',
  method: 'PUT',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'image/png',
  }
}, function (response) { ... }));

您的代码的问题是您将主体放入了
选项中。主体
,但根据,它似乎没有任何这样的选项。

我想您只需要以下内容:

fs.createReadStream('./img/thumbnail.png').pipe(https.request({
  hostname: 'hostname',
  path: '/upload',
  method: 'PUT',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'image/png',
  }
}, function (response) { ... }));

您的代码的问题是您将主体放入了
选项中。主体
,但根据,它看起来没有任何这样的选项。

上传图像(选项,主体)
看起来不正确。。。
body
定义在哪里?很抱歉,我修正了拼写错误,我对图像数据传递到哪里感到困惑???你看过这个网站吗?有很多关于如何使用节点发送数据的例子,大多数人可能会建议使用中间件。我查了很多,已经花了几个小时,迫切需要帮助,并且不能使用请求,它必须是低级的nodejs代码。我只想知道如何在node.js中发送二进制数据,就像在postman的选项中一样。我现在用截图编辑了
上传图像(选项,正文)
看起来不对劲。。。
body
定义在哪里?很抱歉,我修正了拼写错误,我对图像数据传递到哪里感到困惑???你看过这个网站吗?有很多关于如何使用节点发送数据的例子,大多数人可能会建议使用中间件。我查了很多,已经花了几个小时,迫切需要帮助,并且不能使用请求,它必须是低级的nodejs代码。我只想知道如何在node.js中发送二进制数据,就像在postman的选项中一样。我现在用截图编辑过,所以我的问题中截图中的所有选项,无论是
二进制
原始
x-www-form-urlencoded
表单数据
,都会进入
正文
,你如何为每个选项指定
内容类型
?我不知道邮递员所说的这些东西是什么意思。特别是,我想不出“二进制”和“原始”可能意味着什么
x-www-form-urlencoded
大概就是
内容类型(和正文格式),而
表单数据
可能就是
多部分/表单数据
。你可以很容易地查找这两个函数。嗨@smarx,猜猜看,我在
response中没有得到任何响应。在('end',function(){
上,当我将图像数据直接传递到
end()
函数中时,甚至在
response.on('data')上都没有
,就像一切都冻结了一样,我读取图像数据和传递信息的方式是否有问题?当你说“没有得到任何响应”时你的意思是这些事件没有调用你的处理程序吗?我在编辑部分添加了另一段代码,请查看。因此,我问题中屏幕截图中的所有选项,无论是
二进制
原始
x-www-form-urlcoded
表单数据
,都会进入
正文
,如何指定
C内容类型
?我不知道邮递员所说的各种东西是什么意思。特别是,我想不出“二进制”和“原始”可能是什么意思。
x-www-form-urlencoded
大概就是
内容类型
(以及正文的格式),而
表单数据
可能是
多部分/表单数据
。您可以很容易地查找这两个部分。您好@smarx,猜猜看,我在
响应中没有得到任何响应。在('end',function(){
时,我将图像数据直接传递到
end()
函数,甚至在
响应中都没有
,就像一切都冻结了一样,我读取图像数据和传递图像数据的方式是否有问题?当你说“没有得到任何响应”时,你的意思是没有为这些事件调用处理程序吗?我在编辑部分添加了另一段代码,请查看。