2012-03-21 4 views
0

У меня есть веб-сервиса, что я пытаюсь позвонить:Curl объекта к URL поколения

Следующие Curl команда работает для этого

curl -F fa=c.apiupload -F sessiontoken=EA3237F922644115A0F7DB75D0AE388F -F destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC -F [email protected]/Users/cpinera/tmp/panda2.jpg -F zip_extract=1 -F metadata=1 -F meta_img_description="This is a very nice panda" -F meta_img_keywords="panda,happy panda" http://domain.com/razuna/raz1/dam/index.cfm 

но эквивалентный URL, который я генерирует как мой HttpURLConnection для доступа RESTful API не:

http://domain.com/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken=F46D2226463C4ADE866819AACD7D2F5E&filedata=C:\JobInterview\BatchUpload\auth.xml&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1 

Я получаю ответ на запрос REST:

The content was :: <?xml version="1.0" encoding="UTF-8"?><Response><responsecode>1</responsecode><message>Upload failed This was not an uploaded form type</message></Response> 

Вот Java Code

Метод, который использует запрашивает URL:

public static String doQuery(String loginUrl) throws IOException{ 

    URL url = new URL(loginUrl); 
    HttpURLConnection conn = 
      (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("POST"); 

     if (conn.getResponseCode() != 200) { 
     throw new IOException(conn.getResponseMessage()); 
     } 


     InputStream is = conn.getInputStream(); 
     //Buffer the result into a string 
     BufferedReader rd = new BufferedReader(
      new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line; 
     while ((line = rd.readLine()) != null) { 
     line = StringEscapeUtils.unescapeHtml4(line); 
     sb.append(line); 
     } 

     rd.close(); 
     conn.disconnect(); 
     System.out.println("The content was :: " + sb.toString()); 
     return sb.toString(); 
} 

Метод, который должен загрузить:

public static void testUpload(String seesionToken, String file) throws IOException{ 

    String upload = "http://domain.com:8080/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken="+seesionToken+"&filedata="+file+"&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1" ; 
    System.out.println(upload); 
    Authenticate.doQuery(upload); 
} 

После добавления в doQuery: conn.setRequestProperty (» Content-Type "," multipart/form-data ");

И изменения RESTful URL в:

 http://domain.com:8080/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken="+seesionToken+"&filedata="+files.toURI()+"&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1" 

кажется, обнаружить, что URL пытается отправить файл, но до сих пор не может загрузить файл:

 The content was :: <?xml version="1.0" encoding="UTF-8"?><Response><responsecode>1</responsecode><message>Upload failed There was no appropriate FILE found in the upload</message></Response> 
+0

Исходя из ваших ответов, это выглядит, как вы на самом деле пытаетесь написать Java-код, который выполняет определенную REST API. Тем не менее, ничто в вашем вопросе не указывает на это, и вы не разместили какой-либо код, который показывает, что вы сейчас пытаетесь. –

+0

Спасибо за ответ Джейсон, я добавил код! – bljsajdajdlkasjd

ответ

1

Ваш локон команда загрузки файла @ /Users/cpinera/tmp/panda2.jpg. Использование URL-адреса само по себе не будет, оно просто откроет страницу, поэтому ваша ошибка будет «это не загруженная форма».

+0

Спасибо за быстрый ответ. Не могли бы вы рассказать мне, как правильно передать файл. Вот ссылка на документацию веб-сервиса/REST http://wiki.razuna.com/display/ecp/Upload. – bljsajdajdlkasjd

0

Когда вы запустите curl с параметрами -F, он отправляет запрос HTTP POST с указанными парами имени и имени, переданными в теле запроса HTTP. Когда вы получаете доступ к URL-адресу с использованием параметров строки запроса, выполняется HTTP GET. Кажется вероятным, что сервер обрабатывает эти два метода запроса по-разному.

Update, теперь, когда вы опубликовали некоторые Java-код:

Значения в строке запроса части URL используются для передачи информации на веб-сервер, который будет обрабатывающего запрос. Конечно, этот удаленный сервер не узнает, что такое C:/path/to/your/file, потому что это путь к файлу на вашей локальной машине. Правильный способ отправки данных этого файла - открыть файл на Java, а затем прочитать его и записать в выходной поток HttpUrlConnection.

Например, см фрагмент кода, в разделе «Проводка Содержание» на обсуждении Android ДОКУМЕНТАЦИЯ о HttpUrlConnection: http://developer.android.com/reference/java/net/HttpURLConnection.html

+0

Спасибо за быстрый ответ.Я попытался установить в POST didnot работу :(\t HttpURLConnection сопп = \t \t (HttpURLConnection) url.openConnection(); \t \t conn.setRequestMethod ("POST"); – bljsajdajdlkasjd