2015-07-02 2 views
0

Я пытаюсь загрузить файл с помощью модуля request в Telegram's Bot API. Тем не менее, я получаю ошибку 502 Gateway. Вот мой код:Загрузка файла узла заканчивается 502 Ошибка шлюза

var request = require("request"); 
var fs = require("fs"); 
fs.readFile("image.png",function(err,data){ 
    var formdata = {}; 
    formdata.chat_id = <chatid>; 
    formdata.photo = data; 
    if(err) 
     console.log(err); 
    request({ 
     url : "https://api.telegram.org/bot<token>/sendPhoto", 
     method : "POST", 
     headers : { 
     "Content-Type" : "multipart/form-data" 
     }, 
     formData : formdata 
    },function(err,res,body){ 
     if(err) 
      console.log(err) 
     console.log(body); 
    }) 
}); 

Это правильный способ загрузить файл или я где-то ошибаюсь?

ответ

1

я предлагаю, это лучше для вас, чтобы использовать форму поля объекта запроса, который дает вам возможность отправить файл с помощью функции createReadStream фса module.For примера:

var r = request.post({ 
     url: url 
     },someHandler); 

var form = r.form(); 
form.append('file',fs.createReadStream(filePath)); 

Для правильного использования следующим образом:

https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options https://github.com/request/request#forms

+0

Работал! В чем разница между вашим кодом и моим? –

+1

Для расширенных случаев вы можете получить доступ к самому объекту формы данных через r.form(). Это может быть изменено до тех пор, пока запрос не будет запущен в следующем цикле цикла событий. (Обратите внимание, что эта вызывающая форма() очистит установленные данные формы для этого запроса.) - cite from https://github.com/request/request#forms Основная идея - 'form()' очищает данные формы, и это использование устанавливает правильные заголовки (multipart/form-data, content-length, content-type и т. д.) , и он может распознавать и получать всю необходимую информацию из обычных типов потоков (fs.readStream, http.response) –