2016-03-22 78 views
1

sendPhoto命令需要将参数照片定义为InputFile或String。电报BOT Api:如何使用C#发送照片?

该API文档告诉:

要发送的照片。您可以传递file_id作为字符串来重新发送已经在电报服务器上的照片 ,或者使用 multipart/form-data上传新照片。 而

INPUTFILE

该对象表示一个文件的内容被上传。必须是 ,通过浏览器上传文件为 的常用方式,使用multipart/form-data发布。

回答

1

我不是一个C#开发,但我产生使用Postman这个代码,它使用RestSharp LIB

var client = new RestClient("https://api.telegram.org/bot%3Ctoken%3E/sendPhoto"); 
var request = new RestRequest(Method.POST); 
request.AddHeader("postman-token", "7bb24813-8e63-0e5a-aa55-420a7d89a82c"); 
request.AddHeader("cache-control", "no-cache"); 
request.AddHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001"); 
request.AddParameter("multipart/form-data; boundary=---011000010111000001101001", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"photo\"; filename=\"[object Object]\"\r\nContent-Type: false\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"chat_id\"\r\n\r\n2314123\r\n-----011000010111000001101001--", ParameterType.RequestBody); 
IRestResponse response = client.Execute(request); 

就调整它,它应该工作。

1

这里是一个工作,参数化的代码示例:

using System.Linq; 
using System.IO; 
using System.Text; 
using System.Net.Http; 
using System.Threading.Tasks; 

namespace ConsoleApplication 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      SendPhoto(args[0], args[1], args[2]).Wait(); 
     } 

     public async static Task SendPhoto(string chatId, string filePath, string token) 
     { 
      var url = string.Format("https://api.telegram.org/bot{0}/sendPhoto", token); 
      var fileName = filePath.Split('\\').Last(); 

      using (var form = new MultipartFormDataContent()) 
      { 
       form.Add(new StringContent(chatId.ToString(), Encoding.UTF8), "chat_id"); 

       using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 
       { 
        form.Add(new StreamContent(fileStream), "photo", fileName); 

        using (var client = new HttpClient()) 
        { 
         await client.PostAsync(url, form); 
        } 
       } 
      } 
     } 
    } 
}