【发布时间】: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(); } } }
我有两个错误:
“请求实体太大”当我的 mp3 大约为 6mb 或 7mb 或 ...(不使用 http://bayanbox.ir/download/7028444634071302239/Sound-1.mp3)
error_code:400, description:"Bad Request: URL must be in UTF-8"(使用 mp3 进行 28kb 测试后)
【问题讨论】:
标签: c# httpclient telegram telegram-bot