使用服务将图像从android app上传到drupal

时间:2014-08-25 07:44:01

标签: android rest drupal runtime-error image-uploading

我正在尝试将图像从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();
        }

请帮助

1 个答案:

答案 0 :(得分:1)

我假设您已经知道如何为登录身份验证设置CSRF令牌,因为您提到您已成功登录。也就是说,登录后,您应该收到一个包含新令牌的响应。这是您应该用于后续服务端点请求的令牌。

此外,如果您启用了会话身份验证,则还应附加会话信息(" session_name = sessid")

最后,我不明白为什么你不能用String作为构造函数参数创建一个JSONObject。或许通过将JSONObject创建为空对象进行故障排除,然后使用.put()方法将String分配给键,然后再使用Logcat或调试其内容。