使用android中的multipartentity和json将图像上传到服务器

时间:2014-03-30 10:45:38

标签: android json

我已经阅读了很多帖子来实现任务,比如在android中使用multipartentity和josn上传图像以及参数,但我的问题是当我尝试上传图像和参数而不将字符串转换为JSONobject然后图像上传没有错误,但当我试图将响应字符串添加到jsonobject时,在logcat中发生错误,如:)

error: Value`<form of type java.lang.String cannot be converted to JSONObject.

任何人请帮忙解决这个问题?我想将图像和JsonObjec t发送到带有MultipartEntity的PHP服务器。我正在开发一个应用程序,允许用户使用H ttpPost方法上传图像。我使用MultipartEntity,因此我将库apache-mime4j-0.6.1.jar,httpclient-4.3.1.jar,httpcore-4.3.1.jar和httpmime-4.2.1.jar添加到我的应用程序中。

这是我的代码:

    public JSONObject doFileUpload(String _fname, String _lname, String _email,
                String _password, String _country, String _countrycode,
                String _phone) {

            File file1 = new File(selectedPath);
            String urlString = "http://capstonehostingservices.com/fetch_new/app/index.php/fetch/register";
            try {
                HttpClient client = new DefaultHttpClient();
                HttpPost post = new HttpPost(urlString);
                FileBody bin1 = new FileBody(file1);
                MultipartEntity reqEntity = new MultipartEntity();
                reqEntity.addPart("photo", bin1);
                reqEntity.addPart("first_name", new StringBody(_fname));
                reqEntity.addPart("last_name", new StringBody(_lname));
                reqEntity.addPart("email", new StringBody(_email));
                reqEntity.addPart("password", new StringBody(_password));
                reqEntity.addPart("country", new StringBody(_country));
                reqEntity.addPart("country_code", new StringBody(_countrycode));
                reqEntity.addPart("phone", new StringBody(_phone));

                post.setEntity(reqEntity);
                HttpResponse response = client.execute(post);
                resEntity = response.getEntity();
                 String response_str = EntityUtils.toString(resEntity);



                    json = new JSONObject(response_str);


            } catch (Exception ex) {
                Log.e("Debug", "error: " + ex.getMessage(), ex);
            }
            return json;
        }

在上面的代码我试图将响应字符串转换为jsonobject,如何实现这一目标? 我使用selectedpath参数从gallary获取图像路径,我想将图像和JsonObject发送到带有MultipartEntity的PHP服务器。我正在开发一个应用程序,允许用户使用HttpPost方法上传图像。我使用MultipartEntity,因此我将库apache-mime4j-0.6.1.jar,httpclient-4.3.1.jar,httpcore-4.3.1.jar和httpmime-4.2.1.jar添加到我的应用程序中。

1 个答案:

答案 0 :(得分:2)

这可能不是最佳答案,但它是一个很好的例子,可以开始使用。

使用以下函数将文件发送到服务器:

public static void postFile(String fileName) throws Exception {//fileName is path+filename of picture
        String url_upload_image = "http://url-to-api/upload_photo.php";
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url_upload_image);
        MultipartEntityBuilder multipartEntity = MultipartEntityBuilder
                .create();
        multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        multipartEntity.addPart("file", new FileBody(new File(fileName)));
        post.addHeader("id", id);//id is anything as you may need
        post.setEntity(multipartEntity.build());
        HttpResponse response = client.execute(post);
        HttpEntity entity = response.getEntity();

        entity.consumeContent();
        client.getConnectionManager().shutdown();
    }

位于http://url-to-api/upload_photo.php

的PHP文件
<?php
    $name = $_POST['id'];

    $file_path = "images/";

    $file_path = $file_path . basename( $_FILES['file']['name']);

    if(move_uploaded_file($_FILES['file']['tmp_name'], $file_path)) {
        echo "success";
        echo $name;
    } else{
        echo "fail";
    }
 ?>

并确保服务器中的目录或文件夹是可执行文件,可写文件和可读文件。我认为这是主要问题。这是被称为777许可 ..相信我,这和其他事情一样重要。