Как создать файл из массива байтов и отправить его в TelegramBot

#c# #file #asp.net-core #telegram #telegram-bot

Вопрос:

В Сервисе1 я создаю массив байтов и отправляю его Кафке.

В Сервисе 2 я получаю сообщение от Сервиса1, создаю PDF-файл с использованием этого массива байтов и отправляю его в TelegramBot, который отправляет его пользователю.

Услуга 1

И вот как я отправляю массив байтов Кафке

 byte[] file = _pdfBuilder
.AddObject(o =>
{
o.HtmlContent = html;
})
.Convert();

var result = await producer.ProduceAsync(_producerTopic, new Message<Null, string>()
{
Value = Encoding.Unicode.GetString(file)
}, cancelToken.Token);
 

Услуга 2

Вот как я попытался создать PDF-файл и отправить его в Telegram-боту

 using (var fs = new FileStream("FileName.pdf", FileMode.Create))
{
    foreach (var bt in bytes)
    {
        fs.WriteByte(bt);
    }

    fs.Seek(0, SeekOrigin.Begin);
    var document = new InputOnlineFile(fs, "file.pdf");
    await _client.SendDocumentAsync(id, document);
}
 

Или это

 await using var memoryStream = new MemoryStream(bytes);
var doc = new InputOnlineFile(memoryStream, "file.pdf");
await _client.SendDocumentAsync(id, doc);
 

Или

 var memoryStream = new MemoryStream(bytes);
var doc = new InputOnlineFile(memoryStream, "file.pdf");
await _client.SendDocumentAsync(id, doc);
 

Итак, проблема в следующем: в чате с ботом Telegram я получаю пустой PDF-файл.

Так же я создавал файл в контроллере (файл не был пустым).

  byte[] file = _pdfBuilder
                .AddObject(o =>
                {
                    o.HtmlContent = html;
                })
                .Convert();

 return File(file, "application/pdf");
 

Комментарии:

1. Когда вы сохраняете PDF-файл локально из массива байтов, является ли он допустимым pdf-файлом(не поврежден)?

2. Попробуйте сохранить данные, подготовленные для отправки, в файл и откройте этот файл с помощью средства просмотра PDF.

3. Вы отправляете pdf-файл пользователю? или чат на канале?

4. Какой размер pdf вы пытаетесь отправить?

5. Кодировка и декодирование Unicode разрывает файл pdf

Ответ №1:

Кодировка и декодирование Unicode разрывает файл pdf.
Если вам нужно отправить файл в виде строки, используйте преобразование Base64

 var byteArray = new byte[] {1,2,3,4,5,6,7,8,9};
var encString = System.Convert.ToBase64String(byteArray);
var decBytes = System.Convert.FromBase64String(encString);
//result: byte[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
 

Комментарии:

1. Я обновил свой вопрос, пожалуйста, взгляните