2012-03-21 102 views
0

我有web服務,我想呼籲:捲曲對象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 

但我產生我的HttpURLConnection類用於訪問REST風格的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代碼,使用查詢網址

方法:

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

和不斷變化的REST風格的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

根據您的回答,它看起來像你實際上是試圖寫入執行特定REST的Java代碼API函數。然而,在你的問題中沒有任何跡象表明你沒有發佈任何代碼來顯示你正在嘗試的內容。 – 2012-03-21 07:39:01

+0

感謝您的回覆賈森,我添加的代碼! – bljsajdajdlkasjd 2012-03-21 07:43:20

回答

1

你curl命令的上傳文件@ /Users/cpinera/tmp/panda2.jpg。本身使用URL不會,它會簡單地訪問該頁面,因此你的錯誤「這是不是上載的形式」。

+0

感謝您的快速響應。你能告訴我什麼是通過文件的正確方法。這裏是鏈接到Web服務/ REST文檔http://wiki.razuna.com/display/ecp/Upload。 – bljsajdajdlkasjd 2012-03-21 07:30:49

0

當運行curl與-F參數時,其發送在HTTP請求的主體中傳遞的指定的名稱 - 值對的HTTP POST請求。當您使用查詢字符串參數訪問URL時,將執行HTTP GET。服務器似乎有可能以不同的方式處理這兩種請求方法。

更新,現在你已經發布了一些Java代碼:

在URL的查詢字符串部分的值被用來傳遞信息到將要處理請求的Web服務器。當然,這個遠程服務器是不會知道什麼是C:/path/to/your/file,因爲這是你的本地計算機上的文件的路徑。發送該文件數據的正確方法是打開Java中的文件,然後讀取它,並將其寫入到HttpUrlConnection的輸出流。

例如,請參閱「發佈內容」的代碼片段上的HttpUrlConnection的Android文檔的討論:http://developer.android.com/reference/java/net/HttpURLConnection.html

+0

感謝您的快速響應。我嘗試設置到POST因此未工作:(\t HttpURLConnection的康恩= \t \t(HttpURLConnection類)url.openConnection(); \t \t conn.setRequestMethod( 「POST」); – bljsajdajdlkasjd 2012-03-21 07:30:08