【问题标题】:How to send remote mp3 file to Telegram channel using Telegram Bot API's sendAudio method in C#如何在 C# 中使用 Telegram Bot API 发送音频方法将远程 mp3 文件发送到 Telegram 频道
【发布时间】:2016-08-21 06:24:43
【问题描述】:

我在电报中创建了一个机器人 (@mp3lyric_bot_test),并在我的频道 (@mp3lyric_test) 中将其设置为管理员。现在我想make a request 使用telegram api 将mp3 发送到频道。

我的 mp3 在网络上,类似于:http://bayanbox.ir/download/7028444634071302239/Sound-1.mp3

一开始我用这个方法下载mp3:

    public static Task<byte[]> DownloadAsync(string requestUriSt)
    {
        var requestUri = new Uri(requestUriSt);

        byte[] fileBytes;

        using (var httpClient = new HttpClient())
        {
            using (var request = new HttpRequestMessage(HttpMethod.Get, requestUri))
            {
                using (var responseMessage = await httpClient.SendAsync(request))
                {
                    fileBytes = await responseMessage.Content.ReadAsByteArrayAsync();
                    var audioString = Encoding.UTF8.GetString(fileBytes, 0, fileBytes.Length);
                }
            }
        }

        return fileBytes;
    }
  • 如果有办法不下载直接发送mp3,请告诉我怎么做?谢谢。

然后使用此代码发送该字节数组(fileBytes):

  • 我的机器人令牌是 247655935:AAEhpYCeoXA5y7V8Z3WrVcNJ3AaChORjfvw

        using (var client = new HttpClient())
        {
            var uri = new Uri("https://api.telegram.org/bot247655935:AAEhpYCeoXA5y7V8Z3WrVcNJ3AaChORjfvw/sendAudio");
    
            using (var multipartFormDataContent = new MultipartFormDataContent(
                "SendAudio----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)))
            {
                multipartFormDataContent.Add(
                    new StringContent("@mp3lyric_test"), 
                    string.Format("\"{0}\"", "chat_id")
                );
    
                multipartFormDataContent.Add(
                    new StreamContent(new MemoryStream(fileBytes)), 
                    '"' + "audio" + '"'
                );
    
                using (var message = await client.PostAsync(uri, multipartFormDataContent))
                {
                    var contentString = await message.Content.ReadAsStringAsync();
                }
            }
        }
    

我有两个错误:

  1. “请求实体太大”当我的 mp3 大约为 6mb 或 7mb 或 ...(不使用 http://bayanbox.ir/download/7028444634071302239/Sound-1.mp3

  2. error_code:400, description:"Bad Request: URL must be in UTF-8"(使用 mp3 进行 28kb 测试后)

【问题讨论】:

    标签: c# httpclient telegram telegram-bot


    【解决方案1】:

    要发送新的 AudioFile,您可以使用 SendAudio 方法,但要使用 InputFile 字段。

    首先创建一个InputFile 对象,然后在SendAudio 方法的audio 参数中传递这些字节

    如果您需要重新发送相同的AudioFile 给另一个用户,那么您可以使用String 选项作为audio 参数中的@987654330 @

    【讨论】:

    • 我不需要重新发送文件。因此,对于使用 InputFile 发送音频,我使用我所描述的 multipart/form-data。我的代码有什么问题?我该怎么办?
    • @OmidRH 您需要至少发送一次文件。您是否浏览过 InputFile 方法的文档?
    • 是的,我已经浏览了文档,我需要上传新文件。
    • 查看 sendAudio -> core.telegram.org/bots/api#sendaudio 音频参数:“要发送的音频文件。您可以将 file_id 作为字符串传递以重新发送 Telegram 服务器上已经存在的音频,或者上传新的音频文件使用多部分/表单数据。”我想使用 multipart/form-data 上传一个新的音频文件
    【解决方案2】:

    我修改了发送字节数组(fileBytes)的代码,现在它可以工作了:

    using (var client = new HttpClient())
    {
        var uri = new Uri("https://api.telegram.org/bot247655935:AAEhpYCeoXA5y7V8Z3WrVcNJ3AaChORjfvw/sendAudio?chat_id=@mp3lyric_test");
    
        using (var multipartFormDataContent = new MultipartFormDataContent())
        {
            var streamContent = new StreamContent(new MemoryStream(fileBytes));
            streamContent.Headers.Add("Content-Type", "application/octet-stream");
            streamContent.Headers.Add("Content-Disposition", "form-data; name=\"audio\"; filename=\"Sound-1.mp3\"");
            multipartFormDataContent.Add(streamContent, "file", "Sound-1.mp3");
    
            using (var message = await client.PostAsync(uri, multipartFormDataContent))
            {
                var contentString = await message.Content.ReadAsStringAsync();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 2019-02-16
      • 2021-06-11
      • 2018-11-12
      • 2016-07-09
      • 1970-01-01
      相关资源
      最近更新 更多