2012-03-21 106 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