Android: загрузка изображения - PullRequest
0 голосов
/ 16 февраля 2012

В настоящее время я пытаюсь загрузить изображение на сервер PHP через Android. Ниже приведены коды:

// сегмент кодов на Android

                        bm = BitmapFactory.decodeFile(imagePath); //imagePath is the path of the image in my SD card    
                        ByteArrayOutputStream bao = new ByteArrayOutputStream();
                        bm.compress(Bitmap.CompressFormat.JPEG, 90, bao);//compressing image
                        byte[] ba = bao.toByteArray();
                        String ba1 = Base64.encodeBytes(ba);
                        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                        nameValuePairs.add(new BasicNameValuePair("image",ba1));

                        try{
                            HttpClient client = new DefaultHttpClient();
                            HttpPost post = new HttpPost("http://domain.com/upload_image.php");
                            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            HttpResponse res = client.execute(post);
                            HttpEntity entity = res.getEntity();
                            is = entity.getContent();


                        }catch(Exception e){
                            Log.e("log_tag","Error in http connection "+e.toString());
                        }

// сегмент кодов на сервере PHP (upload_image.php)

<?php
$base=$_REQUEST['image'];

// base64 encoded utf-8 string
$binary=base64_decode($base);

// binary, utf-8 bytes
header('Content-Type: bitmap; charset=utf-8');

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

fwrite($file, $binary);

fclose($file);
?>

Мне не удалось загрузить изображение на сервер, на котором файл test.jpg никогда не отображается на сервере. Я запускаю программу со своего смартфона, а не с эмулятора.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012
    String  executeMultipartPost(Bitmap bm,String image_name) {
    String resp = null;
    try {  
    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    bm.compress(CompressFormat.JPEG, 75, bos);

    byte[] data = bos.toByteArray();

    HttpClient httpClient = new DefaultHttpClient();

    HttpPost postRequest = new HttpPost("domain.com/upload_image.php");

    ByteArrayBody bab = new ByteArrayBody(data, image_name);

    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    reqEntity.addPart("uploaded", bab);
    reqEntity.addPart("photoCaption", new StringBody("sfsdfsdf"));
    postRequest.setEntity(reqEntity);
    HttpResponse response = httpClient.execute(postRequest);
            BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    String sResponse;
    StringBuilder s = new StringBuilder();
    while ((sResponse = reader.readLine()) != null) {
    s = s.append(sResponse);
    }
    resp=s.toString();
    } catch (Exception e) {
    // handle exception here
    Log.e(e.getClass().getName(), e.getMessage());
    }
    return resp;


    }
<?php 

$target = "upload/"; 

$target = $target . basename( $_FILES['uploaded']['name']) ; 
$ok=1; 
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
{
echo "yes";
} 
else {
echo "no";
}
?> 
0 голосов
/ 16 февраля 2012
// binary, utf-8 bytes
header('Content-Type: bitmap; charset=utf-8');

не имеет никакого эффекта, вы не выводите растровое изображение в браузер / httpclient.

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

попытайтесь указать полный путь для тестирования, например /tmp/test.jpg.

...