如何从字节数组创建文件并将其发送到 TelegramBot

How to create file from byte array and send it to TelegramBot

在 Service1 中,我创建了一个字节数组并将其发送到 Kafka。

在 Service2 中,我收到来自 Service1 的消息,使用此字节数组创建一个 PDF 文件并将其发送到 TelegramBot,TelegramBot 将其发送给用户。

服务 1

这就是我向 Kafka 发送字节数组的方式

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 Bot 的方式

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 Bot 的聊天中,我收到一个空的 PDF 文件。

这也是我以前在控制器中创建文件的方式(文件不为空)

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

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

Unicode 编码和解码破坏了 pdf 文件。
如果您需要将文件作为字符串发送,请使用 Base64 convert

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 }