- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在测试通过 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/
我将第一次安装DataHub。我正在尝试集成 Hybris Commerce 6.5 和 Hybris Datahub。我建立了hybris commerce 6.5和mysql 5.7.17。我初始
我正在测试通过 API 的 Java 客户端将文件上传到 CKAN/datahub.io 上的数据集。 public String uploadFile() throws CKANEx
我是一名优秀的程序员,十分优秀!