Отправка изображения в двоичном виде через запрос («http») на удаленный сервер

Я пытаюсь отправить изображение на удаленный сервер с сервера nodejs. Вот формат запроса пока.

Замечания: Прямо как бинарный запрос в почтальоне и выбор файла и отправка)

function upload(options, body) {
    body = body || '';
    return new Promise(function(resolve, reject){
        const https = require('https');
        https.request(options, function(response) {
            var body = [];
            response.on('data', function(chunk) {
                body.push(chunk);
            });
            response.on('end', function(){
                resolve(JSON.parse(Buffer.concat(body).toString()))
            });
        }).on('error', function(error) {
            reject(error);
        }).end(body);
    });
}

Использование:

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();
});

Ссылка

 user272719525 июн. 2016 г., 01:37
извините, я исправил опечатки, я не понимаю, куда передавать данные изображения ???
 Rodrigo Ruiz27 июл. 2018 г., 18:30
Ты нашел свой ответ?
 smarx26 июн. 2016 г., 01:14
«Но все же не успех» не является описанием проблемы.
 user272719525 июн. 2016 г., 01:40
Я столько раз искал, уже потратил часы, отчаянно нуждаюсь в помощи и не могу использовать Запрос, это должен быть код узла nodejs низкого уровня.
 user272719525 июн. 2016 г., 08:26
все еще есть проблемы, нетon('data') или жеon('end') вызывается, когда я передаю изображение тела вresponse.end(body) Функция, какой-нибудь совет, ребята?
 adeneo25 июн. 2016 г., 01:52
Похоже, вы уже делаете это, данные вoptions.body и отправляется на удаленный сервер с этим ключом
 smarx26 июн. 2016 г., 01:50
@ user2727195 Я думаю, что код в порядке. Я до сих пор не уверен, у вас проблемы или нет.
 user272719526 июн. 2016 г., 02:45
черт возьми, это время ожидания выхода мокко из тестов раньше, я увеличил время ожидания и теперь работает, но, тем не менее, самое главное, я узнал, как отправлять изображения через readStreams
 adeneo25 июн. 2016 г., 01:39
Вы смотрели надругие ответы на этом сайте есть много примеров того, как отправлять данные с Node, и большинство из них, вероятно, рекомендуют использоватьЗапрос промежуточное программное обеспечение.
 user272719526 июн. 2016 г., 01:26
Извините, я бы сказал, что удаленный сервер не может получить мой файл, хотя код работает сейчас. поэтому не уверен, что если я отправляю свойство файла, Read Stream правильно читает мое изображение, является ли Edit 2 правильным по вашему мнению?
 user272719525 июн. 2016 г., 01:41
Все, что я хочу, это как я могу отправить двоичные данные в node.js, как в опции почтальона. Я отредактировал со скриншотом сейчас
 smarx25 июн. 2016 г., 01:34
uploadImage(options, body) не выглядит правильно ... гдеbody определены?
 user272719525 июн. 2016 г., 01:56
@adeneo, так что для понимания и в контексте моего скриншота почтальона,binary ->options.body и дляraw, x-www-form-urlencoded а такжеform-data -> будет идти к телу, пожалуйста, подтвердите или исправьте.
 user272719526 июн. 2016 г., 02:32
Я думаю, что я достиг проблемы, была проблема с изображением, я выбрал другой, и угадайте, что,readStream('close' не вызывается, это образ 3,1 МБ
 user272719526 июн. 2016 г., 01:58
Из заголовка ответа удаленного сервера content-type я вижу это значение,application/octet-streamВозможно, удаленный сервер ожидает поток октетов, не уверен, как я могу указать это при отправке данных изображения

Ответы на вопрос(1)

Я думаю, вы просто хотите это:

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

Проблема с вашим кодом в том, что вы помещаете тело вoptions.body, но задокументацияне похоже, что есть такая возможность.

 user272719525 июн. 2016 г., 02:17
хорошо, спасибо за ответ, я собираюсь попробовать это.
 smarx26 июн. 2016 г., 01:19
@ josh3736 Согласен. Я сделаю правку.
 user272719526 июн. 2016 г., 01:25
@ josh3736 smarx, пожалуйста, просмотрите мой Edit2 в моем вопросе
 user272719525 июн. 2016 г., 02:25
так что все варианты со скриншота в моем вопросе,binary, raw, x-www-form-urlencoded а такжеform-dataони все идут вbodyкак вам указатьContent-Type для каждого?
 smarx25 июн. 2016 г., 02:29
Я не знаю, что Почтальон имеет в виду под этими разными вещами. В частности, я не могу думать о том, что может означать «двоичный» или «сырой».x-www-form-urlencoded предположительно именно этоContent-Type (и форматирование тела), иform-data возможноmultipart/form-data, Вы можете легко найти оба из них.
 user272719526 июн. 2016 г., 00:48
да нет ответа от обработчика
 user272719525 июн. 2016 г., 08:21
Привет @ Smarx, угадай что, я не получаю никакого ответа вresponse.on('end', function(){ когда я передаю данные изображения непосредственно вend() функция, даже не наresponse.on('data'), как будто все зависает, что-то не так с тем, как я читаю данные изображения и передаю?
 user272719526 июн. 2016 г., 00:54
Я добавил еще один фрагмент кода в раздел редактирования, пожалуйста, просмотрите.
 smarx25 июн. 2016 г., 18:37
Когда вы говорите, что «не получаете никакого ответа», вы имеете в виду, что ваш обработчик не вызывается для этих событий?

Ваш ответ на вопрос