gpt4 book ai didi

java - 通过 Java 客户端将文件上传到 CKAN/datahub.io 中的数据集

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:54 25 4
gpt4 key购买 nike

我正在测试通过 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.83 Mb 时出现 413 错误(“请求实体太大”)。当我将文件缩小到较小尺寸时,这会消失。上传文件大小有限制吗?

  • 500 错误(“内部服务器错误”)。这就是我被困的地方。这可能与我在 datahub.io 上的数据集未“启用数据存储”这一事实有关? (我在数据集中的资源文件旁边看到一个禁用的“数据 API”按钮,工具提示说:“数据 API 对此资源不可用,因为 DataStore 已禁用”

=> 这可能是这个 500 错误的原因吗?如果是这样,我如何从客户端启用它? (指向 Python 代码的指针会很有用!)

谢谢!
PS:我用于测试目的的数据集:http://datahub.io/dataset/testapi

最佳答案

只有有权访问异常日志的人才能告诉您出现 500 的原因。

但是,我会检查您的请求是否与您从与数据存储一起编写的 python 客户端获得的请求相同:https://github.com/okfn/ckanclient/blob/master/ckanclient/init.py#L546

您在多部分请求中发送“bin”图像缓冲区和“comment”file_key。请注意,每次上传都必须更改 file_key,因此请添加时间戳或其他内容。也许您需要为二进制文件添加 Content-Type:

关于java - 通过 Java 客户端将文件上传到 CKAN/datahub.io 中的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14535523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com