2016-03-22 81 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); 
        } 
       } 
      } 
     } 
    } 
}