2012-03-21 3 views
0

J'ai webservice que je suis en train d'appeler:objet Curl URL Génération

Les travaux de commande Curl suivantes pour que

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 

mais l'URL équivalente que je génère mon HttpURLConnection pour accéder API RESTful ne possède pas:

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

Je reçois cette réponse pour le reste demande:

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> 

Voici le code Java

méthode qui utilise des requêtes l'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(); 
} 

Méthode qui devrait télécharger:

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); 
} 

Après avoir ajouté dans doQuery: conn.setRequestProperty (» Content-Type "," multipart/form-data ");

Et changer URL RESTFul à:

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

Il semble détecter cette URL tente d'envoyer un fichier mais ne peut pas télécharger le fichier:

 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

En fonction de vos réponses, il semble que vous essayez réellement d'écrire du code Java qui effectue un repos particulier Fonction API Cependant, rien dans votre question n'indique cela, et vous n'avez posté aucun code qui montre ce que vous essayez actuellement. –

+0

Merci pour la réponse Jason, j'ai ajouté le code !! – bljsajdajdlkasjd

Répondre

1

Votre commande curl est en train de charger le fichier @ /Users/cpinera/tmp/panda2.jpg. L'utilisation de l'URL en elle-même ne suffira pas, elle accèdera simplement à la page, d'où votre erreur que "ce n'était pas un formulaire téléchargé".

+0

Merci pour la réponse rapide. Pouvez-vous s'il vous plaît me dire quelle est la bonne façon de passer le fichier. Voici le lien vers la documentation du service web/REST http://wiki.razuna.com/display/ecp/Upload. – bljsajdajdlkasjd

0

Lorsque vous exécutez curl avec les paramètres -F, il envoie une requête HTTP POST avec les paires nom-valeur spécifiées transmises dans le corps de la requête HTTP. Lorsque vous accédez à une URL à l'aide de paramètres de chaîne de requête, un HTTP GET est effectué. Il semble probable que le serveur gère ces deux méthodes de requête différemment. Mise à jour

, maintenant que vous avez posté un code Java:

Les valeurs dans la partie chaîne de requête de l'URL sont utilisés pour transmettre des informations au serveur Web qui manipulera la demande. Bien sûr, ce serveur distant ne va pas savoir ce qu'est C:/path/to/your/file, car il s'agit d'un chemin vers un fichier sur votre machine locale. Le bon moyen d'envoyer ces données de fichier est d'ouvrir le fichier en Java, puis de le lire et de l'écrire dans le flux de sortie HttpUrlConnection.

Par exemple, voir l'extrait de code sous « Contenu de l'affichage » sur la discussion de la documentation Android de HttpUrlConnection: http://developer.android.com/reference/java/net/HttpURLConnection.html

+0

Merci pour la réponse rapide.J'ai essayé la mise à POST didnot travail :(\t HttpURLConnection conn = \t \t (HttpURLConnection) url.openConnection(); \t \t conn.setRequestMethod ("POST"); – bljsajdajdlkasjd