Отправить файл PDF с помощью Telegram Bot api - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь отправить файл PDF, используя URL-адрес файла и используя метод «sendDocument», проблема в том, что я не могу получить доступ к файлу напрямую из-за сервера, на котором он хранится.Я попытался использовать ответ, приведенный в этом сообщении: readFileSync из URL-адреса для средств массовой информации Twitter - node.js

Это работает, но файл отправляется как "file.doc".Если я изменю расширение на pdf, это правильный файл.Есть ли какой-то дополнительный шаг, который мне нужно сделать, чтобы отправить файл с правильным именем и расширением, или есть другой способ, которым я могу достичь того, что мне нужно?

РЕДАКТИРОВАТЬ: Код, который я использую для получения PDF, выглядит точно так же, как код в ответе на пост, который я предоставил:

function getImage(url, callback) {
https.get(url, res => {
    // Initialise an array
    const bufs = [];

    // Add the data to the buffer collection
    res.on('data', function (chunk) {
        bufs.push(chunk)
    });

    // This signifies the end of a request
    res.on('end', function () {
        // We can join all of the 'chunks' of the image together
        const data = Buffer.concat(bufs);

        // Then we can call our callback.
        callback(null, data);
    });
})
// Inform the callback of the error.
.on('error', callback);
}

Чтобы отправить файл, я использую что-то вроде этого:

getImage(url, function(err, data){
    if(err){
        throw new Error(err);
    }

    bot.sendDocument(
        msg.chat.id,
        data,
    );
})

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Нашел решение.Я использую telebot api (извините, что не упомянул эту деталь, но я не знал об этом, я не создавал проект).

Я использовал следующую строку для отправки файла:

bot.sendDocument(chat_id, data, {fileName: 'file.pdf'});
0 голосов
/ 21 сентября 2018

Вы можете указать имя файла и тип файла, используя этот код:

const fileOptions = {
  // Explicitly specify the file name.
  filename: 'mypdf.pdf',
  // Explicitly specify the MIME type.
  contentType: 'application/pdf',
};

Полная функция:

 getImage("https://your.url/yourfile.pdf", function(err, data){
  if(err){
      throw new Error(err);
  }

      const fileOptions = {
        // Explicitly specify the file name.
        filename: 'mypdf.pdf',
        // Explicitly specify the MIME type.
        contentType: 'application/pdf',
      };
      bot.sendDocument(msg.chat.id, data, {}, fileOptions);
}); 

ПРИМЕЧАНИЕ: Вы НЕОБХОДИМО, чтобы предоставлял пустой объект ({}) вместо опций запроса дополнительной телеграммы, если у вас нет опций для запроса.Например,

// НЕПРАВИЛЬНО! // ' fileOptions ' будет использоваться в качестве дополнительных параметров запроса Telegram !!!

bot.sendAudio(chatId, data, fileOptions);

// ВПРАВО!

bot.sendAudio(chatId, data, {}, fileOptions);

Больше информации здесь: https://github.com/yagop/node-telegram-bot-api/blob/master/doc/usage.md#sending-files

...