2015-10-20 114 views
0

我嘗試添加在現有資源的源URL添加源鏈接,但我不能得到它的工作。CKAN使用Java客戶端

這是我有:

HttpEntity reqEntity = MultipartEntityBuilder.create() 
      .addPart("id", new StringBody("resource id",ContentType.TEXT_PLAIN)) 
      .addPart("Source", new StringBody("www.google.com",ContentType.TEXT_PLAIN))   
      .build(); 
postRequest = new HttpPost(host+"/api/3/action/resource_update"); 
       postRequest.setEntity(reqEntity); 
       postRequest.setHeader("X-CKAN-API-Key", "myApi"); 

使我有以下錯誤:

"success": false, "error": {"__type": "Validation Error", "url": ["Missing value"]} 

我可以添加Source場時,我上傳文件,但它不創建鏈接它。也許是因爲我用ContentType.TEXT_PLAIN而不是告訴CKAN這是一個鏈接?

編輯: 按來源我的意思是在它指向的原始數據的網頁資源信息的鏈接。當手動上傳文件時,你有這個選項,我只是不能讓它與API一起工作。

+0

目前還不清楚您是要上傳文件還是提供文件的網址。請澄清一下,並提供您試圖在API中模擬的Web表單的屏幕截圖。 –

回答

0

錯誤是告訴你,你沒有指定的資源,這是必要的url值。

你POST需要在JSON格式,而你出現內容被髮送它作爲多形式的數據。

你需要發送一個資源的JSON鍵idurlnameformat等即需要設置url而非Source。您可以通過查看/api/action/resource_show?id=xyz來查看現有的密鑰。

使用resource_update正常的方法是先做resource_show,用新值編輯JSON,然後resource_update。這樣你就不會失去任何其他的資源屬性,比如格式。

+0

根據ckan文檔,對於資源更新,它只需要id,而不是url。無論如何,url是什麼?當U做手工iploadü可以有,如果你配置它的作品jjust罰款 –

+0

的資源必填字段由數據集架構決定的,所以變化的源場,這就是爲什麼它沒有在文檔的resource_update提到。 URL是數據的位置 - 它是資源中最重要的部分。當你在CKAN網絡界面上進行上傳時,就我所知,該字段仍被稱爲「URL」。你想上傳文件嗎?如果是這樣,你不能使用resource_update。 –