Загрузить изображение на сервер PHP Android


Я сейчас теряюсь, пытаясь загрузить изображение на свой сервер. Я могу сделать снимок и узнать свое местоположение на устройстве Android. У меня есть следующий код для загрузки файла на сервер:

    public Boolean postFunction(File image) {
    String tag = "postFunction";

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(UPLOAD_URL);

    try {
        MultipartEntity entity = new MultipartEntity();

        entity.addPart("type", new StringBody("photo"));
        entity.addPart("data", new FileBody(image));
        httppost.setEntity(entity);
        HttpResponse response = httpclient.execute(httppost);
        Log.i(tag, "picture was uploaded " + response.toString());
        return true;

    } catch (ClientProtocolException e) {
        Log.e(tag, "Client: " + e.toString());
        return false;
    } catch (IOException e) {
        Log.e(tag, "IO: " + e.toString());
        return false;
    }
}

Я передаю файл изображения этой функции, и она выполняет загрузку. Однако я полагаю, что ошибка лежит на стороне сервера.

Вот мой PHP-код:

      public function upload() {
        //$type = $this->input->post('type');
        //$data = $this->input->post('data');

        $base = $_REQUEST['data'];

        echo $base;

// base64 encoded utf-8 string

        $binary = base64_decode($base);

// binary, utf-8 bytes

        header('Content-Type: bitmap; charset=utf-8');

// print($binary);
//$theFile = base64_decode($image_data);

        $file = fopen('./test.jpg', 'wb');

        fwrite($file, $binary);

        fclose($file);

        echo '<img src=test.jpg>';
    }

Файл трогается, но все равно остается пустым. Я что-то здесь упускаю? Пожалуйста, помогите, я пытался Я погуглил это, но получил другие результаты, которые мне не очень помогли.

Author: Brandon Wilson, 2012-03-03

2 answers

Вы можете проверить один очень хороший учебник здесь.

Также попробуйте выполнить следующий код,

public class TryprojectActivity extends Activity {
    InputStream is;
    int pic_count = 0;
    Bitmap bitmap=null;
    FileInputStream in1,in2,in3;
    BufferedInputStream buf;

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);

        try {
            in1 = new FileInputStream("/sdcard/1.jpg");
        } 
        catch (FileNotFoundException e2) {
        // TODO Auto-generated catch block
            e2.printStackTrace();
        }

        try {
            in2 = new FileInputStream("/sdcard/2.jpg");
        } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } 

    try {
        in3 = new FileInputStream("/sdcard/3.jpg");
    } 
    catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } 

    Bitmap bitmapOrg1 = BitmapFactory.decodeStream(in1);
    ByteArrayOutputStream bao1 = new ByteArrayOutputStream();
    bitmapOrg1.compress(Bitmap.CompressFormat.JPEG, 90, bao1);
    byte [] imagearray1 = bao1.toByteArray();
    String ba1=Base64.encode(imagearray1);

    Bitmap bitmapOrg2 = BitmapFactory.decodeStream(in2);
    ByteArrayOutputStream bao2 = new ByteArrayOutputStream();
    bitmapOrg2.compress(Bitmap.CompressFormat.JPEG, 90, bao2);
    byte [] imagearray2 = bao2.toByteArray();
    String ba2=Base64.encode(imagearray2);

    Bitmap bitmapOrg3 = BitmapFactory.decodeStream(in3);
    ByteArrayOutputStream bao3 = new ByteArrayOutputStream();
    bitmapOrg3.compress(Bitmap.CompressFormat.JPEG, 90, bao3);
    byte [] imagearray3 = bao3.toByteArray();
    String ba3=Base64.encode(imagearray3);

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);

    nameValuePairs.add(new BasicNameValuePair("image1",ba1));
    nameValuePairs.add(new BasicNameValuePair("image2",ba2));
    nameValuePairs.add(new BasicNameValuePair("image3",ba3));

    try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://helpdesk.cispl.com/upload_file.php");
        UrlEncodedFormEntity obj = new UrlEncodedFormEntity(nameValuePairs);
        obj.setChunked(true);
        httppost.setEntity(obj);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        //is = entity.getContent();
        httpclient.getConnectionManager().shutdown(); 
    }
    catch(Exception e){
        //CommonFunctions.writeLOG(ctx.getClass().toString(), e.toString());
        //CommonFunctions.showToast(ctx, "Unable to post captured image file: " +
        //e.toString());
    }
}
 3
Author: Lucifer, 2012-03-03 03:24:42

Если вы используете apache/php на платформе unix, убедитесь, что ваш сервер apache имеет разрешения на запись в каталог, в котором он пытается сохранить файлы (согласно вашему текущему коду, в том же каталоге, в котором находится скрипт PHP). В качестве быстрого теста выполните chmod 0777 . в каталоге, в котором находится ваш скрипт, и посмотрите, правильно ли отображается загруженное изображение.

 0
Author: Phil, 2012-03-03 03:32:44