Java Curl对象到URL的生成

Java Curl对象到URL的生成,java,php,curl,restful-url,Java,Php,Curl,Restful Url,我正在尝试调用Web服务: 下面的Curl命令适用于此 curl -F fa=c.apiupload -F sessiontoken=EA3237F922644115A0F7DB75D0AE388F -F destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC -F filedata=@/Users/cpinera/tmp/panda2.jpg -F zip_extract=1 -F metadata=1 -F meta_img_description

我正在尝试调用Web服务:

下面的Curl命令适用于此

    curl -F fa=c.apiupload -F sessiontoken=EA3237F922644115A0F7DB75D0AE388F -F destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC -F filedata=@/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
但我生成的作为访问RESTFul API的HttpURLConnection的等效URL不:

 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>
应上载的方法:

  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(“内容类型”、“多部分/表单数据”)

以及将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>
内容是::1Upload失败在上载中找不到合适的文件

您的curl命令正在上载文件@/Users/cpinera/tmp/panda2.jpg。单独使用URL不会,它只会访问页面,因此您会出现“这不是上传的表单”的错误。

当您使用-F参数运行
curl
时,它会发送一个HTTP POST请求,并在HTTP请求体中传递指定的名称-值对。使用查询字符串参数访问URL时,将执行HTTP GET。服务器处理这两种请求方法的方式似乎有所不同

更新,现在您已经发布了一些Java代码:

URL的查询字符串部分中的值用于将信息传递给将处理请求的web服务器。当然,这个远程服务器不知道什么是
C:/path/to/your/file
,因为这是本地机器上文件的路径。发送此文件数据的正确方法是用Java打开该文件,然后将其读取并写入
HttpUrlConnection
的输出流


例如,请参阅Android文档中关于
HttpUrlConnection
的讨论中“发布内容”下的代码片段:

感谢您的快速响应。我尝试设置为POST无效:(HttpURLConnection conn=(HttpURLConnection)url.openConnection();conn.setRequestMethod(“POST”);感谢您的快速响应。您能告诉我传递文件的正确方式吗?这是指向web service/REST文档的链接。根据您的回答,您似乎正在尝试编写执行特定REST API函数的Java代码。但是,您的问题中没有任何指示,您也没有发布任何消息显示您当前尝试的代码。感谢回复Jason,我已经添加了代码!!
        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>