2016-03-22 5 views
1

Der Befehl sendPhoto erfordert ein Argumentfoto, das als InputFile oder String definiert ist.Telegramm BOT Api: Wie sendet man ein Foto mit C#?

Das API-Dokument sagt:

Foto zu senden. Sie können entweder file_id als String übergeben, um ein bereits auf den Telegramm-Servern gespeichertes Foto erneut zu senden, oder ein neues Foto mit multipart/form-data hochladen. Und

Eingabedatei

Dieses Objekt stellt den Inhalt einer Datei hochgeladen werden. Muss gepostet werden mit Multipart/Form-Daten in der üblichen Weise, dass Dateien über den Browser hochgeladen werden.

Antwort

1

ich kein C# Entwickler bin, aber ich generiert diesen Code mit Postman, verwendet es 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); 

einfach zwicken und es sollte funktionieren.

1

hier ist ein funktionierendes, parametrisiert Codebeispiel:

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); 
        } 
       } 
      } 
     } 
    } 
}