APIのJavaクライアントを介してCKAN/datahub.io上のデータセットへのファイルのアップロードをテストしています。
public String uploadFile()
throws CKANException {
String returned_json = this._connection.MultiPartPost("", "");
System.out.println("r: " + returned_json);
return returned_json;
}
と
protected String MultiPartPost(String path, String data)
throws CKANException {
URL url = null;
try {
url = new URL(this.m_host + ":" + this.m_port + path);
} catch (MalformedURLException mue) {
System.err.println(mue);
return null;
}
String body = "";
HttpClient httpclient = new DefaultHttpClient();
try {
String fileName = "D:\\test.jpg";
FileBody bin = new FileBody(new File(fileName),"image/jpeg");
StringBody comment = new StringBody("Filename: " + fileName);
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("bin", bin);
reqEntity.addPart("comment", comment);
HttpPost postRequest = new HttpPost("http://datahub.io/api/storage/auth/form/2013-01-24T130158/test.jpg");
postRequest.setEntity(reqEntity);
postRequest.setHeader("X-CKAN-API-Key", this._apikey);
HttpResponse response = httpclient.execute(postRequest);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("status code: " + statusCode);
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String line;
while ((line = br.readLine()) != null) {
body += line;
}
System.out.println("body: " + body);
} catch (IOException ioe) {
System.out.println(ioe);
} finally {
httpclient.getConnectionManager().shutdown();
}
return body;
}
POSTリクエストに対する2つの応答:
アップロードしようとしたjpegが2.83Mbの場合の413エラー(「リクエストエンティティが大きすぎます」)。ファイルを小さいサイズに縮小すると、これは消えます。ファイルサイズのアップロードに制限はありますか?
500エラー(「内部サーバーエラー」)。これは私が立ち往生しているところです。datahub.ioのデータセットが「データストア対応」ではないという事実に関係している可能性がありますか?(データセット内のリソースファイルの横に無効な[データAPI]ボタンが表示され、ツールチップに「データストアが無効になっているため、このリソースではデータAPIを使用できません」と表示されます。
=>この500エラーの考えられる理由はありますか?もしそうなら、どうすればクライアント側からそれを有効にできますか?(Pythonコードへのポインターは便利です!)
どうも!
PS:テスト目的で使用しているデータセット:http://datahub.io/dataset/testapi