2014-06-16 5 views
4

Im пытается загрузить изображение в изображениеhost http://uploads.im/.Загрузить файл с webrequest

Согласно его очень короткому API http://uploads.im/apidocs это способ сделать это:

http://uploads.im/api?upload=http://www.google.com/images/srpr/nav_logo66.png 

Обратите внимание, что в этом примере он upploading изображения из Интернета и Im пытается загрузить файл с компьютера.

Код:

public ActionResult SaveUploadedFile() 
{ 
    //Converts the image i want to upload to a bytearray 
    Image postData = img; 
    byte[] byteArray = imageToByteArray(postData);     

    //Is this adress not correct maybe? Is there a way to test? 
    WebRequest wrq = WebRequest.Create("http://uploads.im/api?upload="); 
    wrq.Method = ("POST"); 

    //Im thinking that here I need som code 
    //that specifys the file i want to upload (bytearray) 

    using (WebResponse wrs = wrq.GetResponse()) 
    using (Stream stream = wrs.GetResponseStream()) 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     string json = reader.ReadToEnd(); 
     tempJson = json; 
    } 
} 

Пожалуйста, смотрите! Благодаря!

EDIT, новый код:

string filepath = @"c:\Users\xxxx\Desktop\Bilder\images\blank.gif"; 

using (WebClient client = new WebClient()) 
{ 
    client.UploadFile("http://uploads.im/api?upload", filepath); 
} 

Я получаю ошибку:: Базовое соединение закрыт

EDIT с попыткой поймать:

string filepath = @"c:\Users\xxxx\Desktop\sack.png"; 
using (WebClient client = new WebClient()) 
{ 
    try 
    { 
     client.UploadFile("http://uploads.im/api?upload", filepath); 
    } 
    catch (Exception e) 
    { 
     throw new ApplicationException(e); 
    } 
} 
+0

Пожалуйста, добавьте сообщение об исключении (e.Message). – kobigurk

+0

Исключение типа «System.Net.WebException» произошло в System.dll, но не было обработано в коде пользователя Дополнительная информация: Основное соединение было закрыто: соединение было неожиданно закрыто. – user2915962

+0

Что я имел в виду, это обернуть бит 'client.UploadFile' с помощью try/catch и показать там сообщение. – kobigurk

ответ

2
private void UploadImage(string filepath) 
{ 

    using(WebClient uploader = new WebClient()) 
    { 
     try 
     { 
      uploader.UploadFile(new Uri("http://uploads.im/api?upload"), filepath); 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show("An error occured :(\r\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

} 

Я использую http://uploads.im/api?upload как URL-адрес, поскольку, поскольку он может быть прочитан в документах, плохо обращайтесь как REQUEST, и он автоматически выделит, что вы загружаете изображение.
Однако я сам пробовал этот код и каждый раз отключился от сервера без какого-либо ответа, только The remote host unexpectedly closed the connection. Согласно документам, вы должны получить даже ответ Bad request, когда что-то не так. Я связался с поддержкой и надеюсь, что они могут рассказать мне больше об этом. Я обновлю этот ответ, как только они ответят мне.

+0

Большое спасибо! Это похоже на более эффективное решение, чем то, что у меня есть сейчас. Я все еще получаю сообщение об ошибке ... см. Редактировать – user2915962

+0

. Я также должен добавить, что Im делает это, чтобы получить ответ от файла uploads.im, содержащего href для image ... – user2915962

+0

Вы можете прочитать ответ Webclient. Если вам просто нужно получить URL-адрес страницы, добавив __format = text__, следует сохранить работу для разбора XML/JSON, потому что тогда вы получите только URL-адрес в виде обычного текста. Я думаю, вы действительно должны прочитать документацию снова. И вы не справляетесь с правом исключения. То, что вы делаете прямо сейчас, ломает исключение и бросает его как новый. Я добавлю еще несколько кодов с объяснениями, когда буду дома, но я бы посоветовал вам снова прочитать документацию по API и классу Webclient на MSDN. – Kimmax