Загрузка изображений на Imgur.com с использованием C # - PullRequest
2 голосов
/ 11 января 2010

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

Первый простой тест для начала. Как я могу загрузить изображение с помощью 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()

Ответы [ 3 ]

4 голосов
/ 11 января 2010

похоже, что сайт использует HTTP Post для загрузки изображений. Взгляните на класс HTTPWebRequest и используйте его для POST по URL: Отправка данных с помощью HTTPRequest .

3 голосов
/ 02 февраля 2012

Imgur API теперь предоставляет полный пример c # :

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();
        }
    }
}
1 голос
/ 16 февраля 2017

Почему бы вам не использовать 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

...