我正在尝试将图像从android应用程序上传到drupal。在drupal上我已经使用rest服务器启用了服务模块。我的端点是androidrpc-endpoint。我成功了。但是,现在我收到类型org.json.JSONArray的错误([“CSRF验证失败”]无法转换为JSONObject)。如果有人能指出这个错误或给我一个教程可以遵循。
String filePath = "mnt/sdcard/application/AboutUS.jpg";
Bitmap bm = BitmapFactory.decodeFile(filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] byteArrayImage = baos.toByteArray();
String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
HttpPost httpPost = new HttpPost("http://drupal/androidrpc-endpoint/file")
JSONObject json = new JSONObject();
JSONObject fileObject = new JSONObject();
try {
fileObject.put("file", encodedImage);
fileObject.put("filename", "AboutUS");
fileObject.put("uid",1);
fileObject.put("filepath", filePath);
json.put("file", fileObject);
StringEntity se = new StringEntity(json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(se);
//send the POST request
HttpResponse response = httpclient.execute(httpPost);
//read the response from Services endpoint
String jsonResponse = EntityUtils.toString(response.getEntity());
JSONObject jsonObject = new JSONObject(jsonResponse);//here is the error
int fid;
fid= jsonObject.getInt("fid");
return null;
}
catch(Exception e){
e.printStackTrace();
}
请帮助
答案 0 :(得分:1)
我假设您已经知道如何为登录身份验证设置CSRF令牌,因为您提到您已成功登录。也就是说,登录后,您应该收到一个包含新令牌的响应。这是您应该用于后续服务端点请求的令牌。
此外,如果您启用了会话身份验证,则还应附加会话信息(" session_name = sessid")
最后,我不明白为什么你不能用String作为构造函数参数创建一个JSONObject。或许通过将JSONObject创建为空对象进行故障排除,然后使用.put()方法将String分配给键,然后再使用Logcat或调试其内容。