2013-12-09 120 views
0

我試圖將curl'-F'選項的等效項發送到指定的URL。發佈到服務器的HttpPost參數返回HTTP 500錯誤

這是命令看起來像使用捲曲:

curl -F"optionName=cool" -F"[email protected]" http://myurl.com 

我相信我在使用了Apache的HttpPost類httpcomponents庫正確。

我提供了一個name = value類型的參數。 optionName只是一個字符串,'file'是我本地存儲在驅動器上的一個文件(因此@myFile表示它是一個本地文件)。

如果我打印響應,我得到一個HTTP 500錯誤......我不確定是什麼原因造成了這裏的問題,因爲服務器響應時應該使用上面提到的Curl命令。在查看下面的代碼時是否有一些簡單的錯誤?

HttpPost post = new HttpPost(postUrl); 
    HttpClient httpClient = HttpClientBuilder.create().build(); 

    List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>(); 
    nvps.add(new BasicNameValuePair(optionName, "cool")); 
    nvps.add(new BasicNameValuePair(file, "@myfile")); 

    try { 
     post.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); 
     HttpResponse response = httpClient.execute(post); 
     // do something with response 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

回答

1

嘗試使用MultipartEntity而不是UrlEncodedFormentity,同時處理參數和文件上傳:

MultipartEntity entity = new MultipartEntity(); 
entity.addPart("optionName", "cool"); 
entity.addPart("file", new FileBody("/path/to/your/file")); 
.... 

post.setEntity(entity); 

編輯

MultipartEntity已被棄用,FileBody構造函數使用File,而不是String,所以:

MultipartEntityBuilder entity = MultipartEntityBuilder.create(); 
entity.addTextBody("optionName", "cool"); 
entity.addPart("file", new FileBody(new File("/path/to/your/file"))); 
.... 
post.setEntity(entity.build()); 

謝謝@CODEBLACK。

+0

代碼的祕密解決了,thssssffffff! – CODEBLACK

相關問題