2010-01-10 2 views
2

Я только что получил свой уникальный ключ API-разработчика от Imgur, и я боюсь начать растрескивание этого ребенка.Загрузка изображений на Imgur.com с использованием C#

Сначала простой тест, чтобы отбросить ситуацию. Как загрузить изображение с помощью C#? Я нашел это с помощью Python:

#!/usr/bin/python 

import pycurl 

c = pycurl.Curl() 
values = [ 
      ("key", "YOUR_API_KEY"), 
      ("image", (c.FORM_FILE, "file.png"))] 
# OR:  ("image", "http://example.com/example.jpg"))] 
# OR:  ("image", "BASE64_ENCODED_STRING"))] 

c.setopt(c.URL, "http://imgur.com/api/upload.xml") 
c.setopt(c.HTTPPOST, values) 

c.perform() 
c.close() 

ответ

4

похоже, что сайт использует HTTP-сообщение для загрузки изображений. Взгляните на класс HTTPWebRequest и используйте его для отправки по почте по адресу: Posting data with HTTPRequest.

+0

Вы сэр - джентльмен и ученый. Огромное спасибо. : 3 –

2

Imgur API теперь составляют complete c# example:

using System; 
using System.IO; 
using System.Net; 
using System.Text; 

namespace ImgurExample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      PostToImgur(@"C:\Users\ashwin\Desktop\image.jpg", IMGUR_ANONYMOUS_API_KEY); 
     } 

     public static void PostToImgur(string imagFilePath, string apiKey) 
     { 
      byte[] imageData; 

      FileStream fileStream = File.OpenRead(imagFilePath); 
      imageData = new byte[fileStream.Length]; 
      fileStream.Read(imageData, 0, imageData.Length); 
      fileStream.Close(); 

      string uploadRequestString = "image=" + Uri.EscapeDataString(System.Convert.ToBase64String(imageData)) + "&key=" + apiKey; 

      HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://api.imgur.com/2/upload"); 
      webRequest.Method = "POST"; 
      webRequest.ContentType = "application/x-www-form-urlencoded"; 
      webRequest.ServicePoint.Expect100Continue = false; 

      StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream()); 
      streamWriter.Write(uploadRequestString); 
      streamWriter.Close(); 

      WebResponse response = webRequest.GetResponse(); 
      Stream responseStream = response.GetResponseStream(); 
      StreamReader responseReader = new StreamReader(responseStream); 

      string responseString = responseReader.ReadToEnd(); 
     } 
    } 
} 
+2

Я уже видел этот код раньше. Это не сработало для меня, а также ссылка, которую вы предоставили, была снята. Имгур сказал мне (я спросил их), что они убрали его, потому что более старые примеры были неактуальны из-за нового API. – Ahmad

0

Почему вы не используете NuGet для этого: называется Imgur.API и для загрузки вы бы метод, как это:

/* 
    The refresh token and all the values represented by constans are given when you allow the application in your imgur panel on the response url 
*/ 

public OAuth2Token CreateToken() 
{ 
    var token = new OAuth2Token(TOKEN_ACCESS, REFRESH_TOKEN, TOKEN_TYPE, ID_ACCOUNT, IMGUR_USER_ACCOUNT, int.Parse(EXPIRES_IN)); 
    return token; 
} 

//Use it only if your token is expired 
public Task<IOAuth2Token> RefreshToken() 
{ 
    var client = new ImgurClient(CLIENT_ID, CLIENT_SECRET); 
    var endpoint= new OAuth2Endpoint(client); 
    var token = endpoint.GetTokenByRefreshTokenAsync(REFRESH_TOKEN); 
    return token; 
} 


public async Task UploadImage() 
{ 
    try 
    { 
      var client = new ImgurClient(CLIENT_ID, CLIENT_SECRET, CreateToken()); 
      var endpoint = new ImageEndpoint(client); 
      IImage image; 
      //Here you have to link your image location 
      using (var fs = new FileStream(@"IMAGE_LOCATION", FileMode.Open)) 
      { 
      image = await endpoint.UploadImageStreamAsync(fs); 
      } 
       Debug.Write("Image uploaded. Image Url: " + image.Link); 
     } 
     catch (ImgurException imgurEx) 
     { 
       Debug.Write("Error uploading the image to Imgur"); 
       Debug.Write(imgurEx.Message); 
     } 
    } 

Также вы можете найти здесь все ссылки: Imgur.API NuGet

Смежные вопросы