загрузка изображения в imgur с помощью c#

При загрузке изображения на imgur.com с помощью приведенного ниже кода возвращается код ошибки http 400. Мой ключ разработчика правильный, и я пробовал разные форматы изображений размером до 70 КБ. Я также попробовал пример кода для С#, приведенный на 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();
}

person rovsen    schedule 05.12.2010    source источник
comment
Вы когда-нибудь заставляли это работать?   -  person theChrisKent    schedule 13.12.2010
comment
Нет, все так же. Это побочный проект, над которым я работаю дома. Думаю, я посмотрю на другие сервисы изображений.   -  person rovsen    schedule 13.12.2010


Ответы (2)


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

person rovsen    schedule 15.12.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, используя свой потребительский ключ и потребительский секрет.

У 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.

person theChrisKent    schedule 05.12.2010
comment
Крис спасибо за ответ. Этот код по-прежнему возвращает код 400, используя мой ключ разработчика. Загрузка — это анонимный метод API. Так что моего ключа разработчика должно быть достаточно. Разве мой ключ разработчика не является также анонимным ключом? Может быть, что-то не так с моей локальной машиной? - person rovsen; 05.12.2010
comment
Я попробовал свой код, используя ваш ключ, и он все тот же. Я также отредактировал свой вопрос и добавил код преобразования. - person rovsen; 05.12.2010