загрузка изображения в imgur с помощью c # - PullRequest
2 голосов
/ 05 декабря 2010

Загрузка изображения на imgur.com с использованием приведенного ниже кода возвращает код ошибки http 400. Мой ключ разработчика правильный, и я пробовал разные форматы изображений размером до 70 кб. Я также попробовал пример кода для c #, данный на http://api.imgur.com/examples, но он также дает http 400. В чем может быть проблема?

public XDocument Upload(string imageAsBase64String)
{
    XDocument result = null;
    using (var webClient = new WebClient())
    {
        var values = new NameValueCollection
        {
            { "key", key },
            { "image", imageAsBase64String },
            { "type", "base64" },
        };
        byte[] response = webClient.UploadValues("http://api.imgur.com/2/upload.xml", "POST", values);
        result = XDocument.Load(new MemoryStream(response));
    }
    return result;
}

РЕДАКТИРОВАТЬ: Это приложение ASP.NET MVC и действие контроллера вызывающего абонента:

[HttpPost]
public ActionResult UploadImage(HttpPostedFileBase uploadFile)
{
    if (uploadFile.ContentLength > 0)
    {
        var imgService = new ImgUrImageService();
        byte[] fileBytes = new byte[uploadFile.InputStream.Length];
        Int64 byteCount = uploadFile.InputStream.Read(fileBytes, 0, (int)uploadFile.InputStream.Length);
        uploadFile.InputStream.Close();
        string fileContent = Convert.ToBase64String(fileBytes, 0, fileBytes.Length);
        var response = imgService.Upload(fileContent);
    }
    return View();
}

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Хорошо, я нашел причину.Настройка прокси (для Fiddler) в моем файле web.config была причиной проблемы.Устранение проблемы решило проблему и мою другую проблему (связанную с recaptcha).Код работает как шарм.

1 голос
/ 05 декабря 2010

Если вы измените свой код следующим образом:

public XDocument Upload(string imageAsBase64String)
{
    XDocument result = null;
    using (var webClient = new WebClient())
    {
        var values = new NameValueCollection
            {
                { "key", key },
                { "image", imageAsBase64String }
            };
        byte[] response = webClient.UploadValues("http://api.imgur.com/2/upload.xml", "POST", values);
        result = XDocument.Load(System.Xml.XmlReader.Create(new MemoryStream(response)));
    }
    return result;
}

Все будет хорошо работать с АНОНИМНЫМ ключом API. Чтобы использовать аутентифицированный API, вам нужно будет создать токен OAuth, используя ваш Consumer Key и Consumer Secret.

Imgur имеет дополнительную информацию о необходимых конечных точках и некоторые ссылки на дополнительную помощь здесь: http://api.imgur.com/auth

Ваш код конверсии выглядит в основном нормально, я немного его изменил:

[HttpPost]
public ActionResult UploadImage(HttpPostedFile uploadFile)
{
    if (uploadFile.ContentLength > 0)
    {
        var imgService = new ImgUrImageService();
        byte[] fileBytes = new byte[uploadFile.ContentLength];
        uploadFile.InputStream.Read(fileBytes, 0, fileBytes.Length);
        uploadFile.InputStream.Close();
        string fileContent = Convert.ToBase64String(fileBytes);
        var response = imgService.Upload(fileContent);
    }
    return View();
}

В исходном коде загрузки вы добавляете дополнительное значение типа, вы все еще добавляете его или изменили свой код в соответствии с моим измененным кодом выше? Я не вижу причин для добавления этого значения и не вижу, где оно поддерживается с помощью imgur.

...