将图像从android上传到PHP服务器

用户名

在我的应用程序中,我将图像从设备上传到本地Web服务器...执行代码后,在服务器中创建了.jpg文件,但未打开。并且服务器中文件的大小与原始文件不同。

Android活动:-

public class MainActivity extends Activity {


private static int RESULT_LOAD_IMAGE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btnSelectImage=(Button) findViewById(R.id.uploadButton);
    btnSelectImage.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

        Intent i=new   Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        startActivityForResult(i, RESULT_LOAD_IMAGE);

        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data!=null) {

        Uri selectedImage=data.getData();
        String[] filePathColumn={MediaStore.Images.Media.DATA};

        Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();


        Bitmap bitmap=BitmapFactory.decodeFile(picturePath);

        ImageView im = (ImageView) findViewById(R.id.imgBox);
        im.setImageBitmap(bitmap);

        /*
         * Convert the image to a string
         * */
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want.
        byte [] byte_arr = stream.toByteArray();
        String image_str = Base64.encodeToString(byte_arr,Base64.DEFAULT);

        /*
         * Create a name value pair for the image string to be passed to the server
         * */
        ArrayList<NameValuePair> nameValuePairs = new  ArrayList<NameValuePair>();            
        nameValuePairs.add(new BasicNameValuePair("image",image_str));


        JSONObject jsonString=new JSONObject();
        try {
            jsonString.put("img", image_str);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        new uploadImageToPhp().execute(jsonString);



    }


}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);


    return true;
}
public class uploadImageToPhp extends AsyncTask<JSONObject, Void, Void>
{
    String dataToSend=null;

    public static final String prefix="http://";                                                        //prefix of the urls
    public static final String server_ip="172.16.26.155";                                                   //the ip address where the php server is located    

    public static final String completeServerAddress=prefix+server_ip+"/test_upload/upload_image.php";                  //Exact location of the php files

    @Override
    protected Void doInBackground(JSONObject... params) {

        dataToSend="image="+params[0];
        communicator(completeServerAddress, dataToSend);




        return null;
    }

    public void communicator(String urlString,String dataToSend2)
    {
        String result=null;

        try
        {
            URL url=new URL(urlString);
            URLConnection conn=url.openConnection();

            HttpURLConnection httpConn=(HttpURLConnection) conn;
            httpConn.setRequestProperty("Accept", "application/json");
            httpConn.setRequestProperty("accept-charset", "UTF-8");
            httpConn.setRequestMethod("POST");         
            httpConn.connect();

            //Create an output stream to send data to the server
            OutputStreamWriter out=new OutputStreamWriter(httpConn.getOutputStream());
            out.write(dataToSend2);
            out.flush();

            int httpStatus = httpConn.getResponseCode();            
            System.out.println("Http status :"+httpStatus);

            if(httpStatus==HttpURLConnection.HTTP_OK)
            {
                Log.d("HTTP STatus", "http connection successful");

                BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
                StringBuilder sb = new StringBuilder();
                String inputLine;
                while ((inputLine = in.readLine()) != null)
                {
                    System.out.println(inputLine);
                    sb.append(inputLine+"\n");
                }
                in.close();
                result=sb.toString();                       

                try
                {

                    //jsonResult = new JSONObject(result);
                }
                catch(Exception e)
                {
                     Log.e("JSON Parser", "Error parsing data " + e.toString());
                }


            }
            else
            {
                System.out.println("Somthing went wrong");
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }


}

}

PHP代码:-

 $recievedJson=$_REQUEST['image'];
$imageContent=json_decode($recievedJson,true);
 $base=$imageContent["img"];

 $binary=base64_decode($base);

 echo $binary;
header('Content-Type: bitmap; charset=utf-8');
$file = fopen('uploaded_image.jpg', 'wb');
fwrite($file, $binary);
fclose($file);
无辜杀手

使用下面的代码。它将执行相同的操作。

public class UploadImage extends Activity {
    InputStream inputStream;
        @Override
    public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.main);

            Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);           ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want.
            byte [] byte_arr = stream.toByteArray();
            String image_str = Base64.encodeBytes(byte_arr);
            ArrayList<NameValuePair> nameValuePairs = new  ArrayList<NameValuePair>();

            nameValuePairs.add(new BasicNameValuePair("image",image_str));

             Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                  try{
                         HttpClient httpclient = new DefaultHttpClient();
                         HttpPost httppost = new HttpPost("server-link/folder-name/upload_image.php");
                         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                         HttpResponse response = httpclient.execute(httppost);
                         String the_string_response = convertResponseToString(response);
                         runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    Toast.makeText(UploadImage.this, "Response " + the_string_response, Toast.LENGTH_LONG).show();                          
                                }
                            });

                     }catch(Exception e){
                          runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(UploadImage.this, "ERROR " + e.getMessage(), Toast.LENGTH_LONG).show();                              
                            }
                        });
                           System.out.println("Error in http connection "+e.toString());
                     }  
            }
        });
         t.start();
        }

        public String convertResponseToString(HttpResponse response) throws IllegalStateException, IOException{

             String res = "";
             StringBuffer buffer = new StringBuffer();
             inputStream = response.getEntity().getContent();
             int contentLength = (int) response.getEntity().getContentLength(); //getting content length…..
              runOnUiThread(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(UploadImage.this, "contentLength : " + contentLength, Toast.LENGTH_LONG).show();                     
            }
        });

             if (contentLength < 0){
             }
             else{
                    byte[] data = new byte[512];
                    int len = 0;
                    try
                    {
                        while (-1 != (len = inputStream.read(data)) )
                        {
                            buffer.append(new String(data, 0, len)); //converting to string and appending  to stringbuffer…..
                        }
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                    try
                    {
                        inputStream.close(); // closing the stream…..
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                    res = buffer.toString();     // converting stringbuffer to string…..

                    runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                       Toast.makeText(UploadImage.this, "Result : " + res, Toast.LENGTH_LONG).show();
                    }
                });
                    //System.out.println("Response => " +  EntityUtils.toString(response.getEntity()));
             }
             return res;
        }
}

PHP代码

<?php
    $base=$_REQUEST['image'];
     $binary=base64_decode($base);
    header('Content-Type: bitmap; charset=utf-8');
    $file = fopen('uploaded_image.jpg', 'wb');
    fwrite($file, $binary);
    fclose($file);
    echo 'Image upload complete!!, Please check your php file directory……';
?>

更新

不建议使用NameValuePair和Http类,因此,我尝试了此代码,它对我有用。希望有帮助!

private void uploadImage(Bitmap imageBitmap){
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    imageBitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);
    byte[] b = stream.toByteArray();
    String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
    ArrayList<Pair<String, String>> params = new ArrayList<Pair<String, String>>();
    params.add(new Pair<>("image", encodedImage));

    try {
        new AsyncUploader().execute(my_upload_php, getQuery(params));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

private String getQuery(List<Pair<String, String>> params) throws UnsupportedEncodingException{
    StringBuilder result = new StringBuilder();
    boolean first = true;

    for(Pair<String, String> pair : params){
        if(first)
            first = false;
        else
            result.append("&");

        result.append(URLEncoder.encode(pair.first, "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(pair.second, "UTF-8"));
    }
    return result.toString();
}

private class AsyncUploader extends AsyncTask<String, Integer, String>
{
    @Override
    protected String doInBackground(String... strings) {
        String urlString = strings[0];
        String params = strings[1];
        URL url = null;
        InputStream stream = null;
        HttpURLConnection urlConnection = null;
        try {
            url = new URL(urlString);
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoOutput(true);

            urlConnection.connect();

            OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream());
            wr.write(params);
            wr.flush();

            stream = urlConnection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"), 8);
            String result = reader.readLine();
            return result;
        }catch (IOException ioe){
            ioe.printStackTrace();
        } finally {
            if (urlConnection != null)
                urlConnection.disconnect();
        }
        return null;
    }

    @Override
    protected  void onPostExecute(String result) {
        Toast.makeText(MakePhoto.this, result, Toast.LENGTH_SHORT).show();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将图像从android上传到PHP服务器

来自分类Dev

从iOS将图像上传到PHP服务器

来自分类Dev

将压缩图像上传到PHP服务器

来自分类Dev

将压缩的图像上传到PHP服务器

来自分类Dev

PHP将图像上传到服务器

来自分类Dev

使用 cURL 将图像上传到 PHP 服务器?

来自分类Dev

从Android设备将图像上传到服务器

来自分类Dev

Java Android将图像上传到服务器

来自分类Dev

Android无法将图像上传到服务器

来自分类Dev

将图像上传到服务器

来自分类Dev

使用Android和PHP将图像上传到服务器(MySQL数据库)

来自分类Dev

将图像从android上传到php服务器无法正常工作

来自分类Dev

Android:将图片上传到PHP服务器

来自分类Dev

如何使用php和android将多个图像上传到服务器(mysql数据库)

来自分类Dev

通过javascript将图像上传到服务器

来自分类Dev

将图像上传到服务器时重命名

来自分类Dev

正在将图像上传到服务器,但未显示

来自分类Dev

将图像上传到服务器不起作用

来自分类Dev

无法将图像上传到服务器ios

来自分类Dev

ExpressJS Multer:将图像上传到服务器

来自分类Dev

Flutter Dio:无法将图像上传到服务器

来自分类Dev

iOS通过ASP将图像上传到服务器

来自分类Dev

从PictureBox将图像上传到服务器

来自分类Dev

无法将图像上传到服务器ios

来自分类Dev

正在将图像上传到服务器,但未显示

来自分类Dev

将图像上传到服务器symfony2

来自分类Dev

将转换后的图像上传到服务器

来自分类Dev

将图像上传到服务器不起作用

来自分类Dev

使用AsyncTask将图像或视频上传到服务器