Вот рабочий код в Python (с использованием cURL):
#!/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()
Вот что у меня есть в C #:
public void UploadImage()
{
//I think this line is doing something wrong.
//byte[] x = File.ReadAllBytes(@"C:\Users\Sergio\documents\visual studio 2010\Projects\WpfApplication1\WpfApplication1\Test\hotness2.jpg");
//If I do it like this, using a direct URL everything works fine.
string parameters = @"key=1b9189df79bf3f8dff2125c22834210903&image=http://static.reddit.com/reddit.com.header.png"; //Convert.ToBase64String(x);
WebRequest webRequest = WebRequest.Create(new Uri("http://imgur.com/api/upload"));
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(parameters);
Stream os = null;
try
{ // send the Post
webRequest.ContentLength = bytes.Length; //Count bytes to send
os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length); //Send it
}
catch (WebException ex)
{
MessageBox.Show(ex.Message, "HttpPost: Request error");
}
finally
{
if (os != null)
{
os.Close();
}
}
try
{ // get the response
WebResponse webResponse = webRequest.GetResponse();
StreamReader sr = new StreamReader(webResponse.GetResponseStream());
MessageBox.Show(sr.ReadToEnd().Trim());
}
catch (WebException ex)
{
MessageBox.Show(ex.Message, "HttpPost: Response error");
}
}
Теперь я заметил, что когда я изменил свой ключ API в строке параметров на «239231» или любое другое число, я получил ответ: «Неверный ключ API». Поэтому я думаю, что-то должно работать правильно.
Я поместил свой правильный ключ API и теперь получаю другой ответ: «Неверный формат изображения. Попробуйте загрузить изображение JPEG.»
Служба, которую я использую, принимает почти каждый формат изображения, поэтому я на 100% уверен, что ошибка в том, как я отправляю файл. Кто-нибудь может пролить свет?
EDIT !!!
Оказывается, когда я загружаю изображение в формате JPG, я получаю эту серую коробочку. Если я загружаю большое изображение JPG, я ничего не получаю. Например: http://i.imgur.com/gFsUY.jpg
Когда я загружаю PNG, загруженное изображение даже не отображается.
Я уверен, что проблема в кодировке. Что я могу сделать?
РЕДАКТИРОВАТЬ 2 !!!
Теперь я на 100% уверен, что проблема заключается в первой строке метода. File.ReadAllBytes () должен что-то делать не так. Если я загружаю файл URL, все работы peachy: http://imgur.com/sVH61.png
Интересно, какую кодировку мне следует использовать. : S