繁体   English   中英

如何将所有图库图像上传到Android中的服务器?

[英]How to upload all gallery images to a server in Android ?

我想实现一项功能,如果用户单击备份按钮,则该应用程序会自动从图库中获取所有图像,然后将其发送到服务器。 目前,我要做的是用户单击按钮,然后选择图像,然后将照片发送到服务器,但我想做的是,我要拍摄存储在存储卡或手机中的所有图像。

我怎样才能做到这一点 ?

这是我选择照片然后发送到服务器的工作代码

主要活动

public class MainActivity extends Activity{

    Uri currImageURI;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);




        Button upload_btn = (Button) this.findViewById(R.id.uploadButton);
        upload_btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                // To open up a gallery browser
                  Intent intent = new Intent();
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_GET_CONTENT);
                  startActivityForResult(Intent.createChooser(intent, "Select Picture"),1);
                }});



    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == 1) {
            // currImageURI is the global variable I’m using to hold the content:
                currImageURI = data.getData();
                System.out.println("Current image Path is ----->" +                          getRealPathFromURI(currImageURI));
                HttpUploader uploader = new HttpUploader();

                try {
                     uploader.execute(getRealPathFromURI(currImageURI)).get();        
                    } catch (InterruptedException e) {
                      e.printStackTrace();
                    } catch (ExecutionException e) {
                      e.printStackTrace();
                    }
                TextView tv_path = (TextView) findViewById(R.id.path);
                tv_path.setText(getRealPathFromURI(currImageURI));
            }
        }
    }

  //Convert the image URI to the direct file system path of the image file
    public String getRealPathFromURI(Uri contentUri) {
        String [] proj={MediaStore.Images.Media.DATA};
        android.database.Cursor cursor = managedQuery( contentUri,
        proj,     // Which columns to return
        null,     // WHERE clause; which rows to return (all rows)
        null,     // WHERE clause selection arguments (none)
        null);     // Order-by clause (ascending by name)
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

}

HttpUploader

    public  class HttpUploader extends AsyncTask<String, Void, String> {

    protected String doInBackground(String... path) {

        String outPut = null;

        for (String sdPath:path) {

            Bitmap bitmapOrg = BitmapFactory.decodeFile(sdPath);
            ByteArrayOutputStream bao = new ByteArrayOutputStream();

            //Resize the image
            double width = bitmapOrg.getWidth();
            double height = bitmapOrg.getHeight();
            double ratio = 400/width;
            int newheight = (int)(ratio*height);

            System.out.println("———-width" + width);
            System.out.println("———-height" + height);

            bitmapOrg = Bitmap.createScaledBitmap(bitmapOrg, 400, newheight, true);

            //Here you can define .PNG as well
            bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 95, bao);
            byte[] ba = bao.toByteArray();
            String ba1 = Base64.encodeToString(ba, 0);

            System.out.println("uploading image now ——–" + ba1);

            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("image", ba1));

            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("httppath");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();                

                // print responce
                outPut = EntityUtils.toString(entity);
                Log.i("GET RESPONSE—-", outPut);

                //is = entity.getContent();
                Log.e("log_tag ******", "good connection");

                bitmapOrg.recycle();

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

您可以使用以下方法获取ArrayList中的所有文件列表。

private ArrayList<Uri> getFileList()
{
    ArrayList<Uri> fileList = new ArrayList<Uri>();
    try
    {
        String[] proj = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
        Cursor actualimagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj,
                null, null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);

        int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

        for ( int i = 0 ; i < actualimagecursor.getCount() ; i++ )
        {
            actualimagecursor.moveToPosition(i);
            String fileName = actualimagecursor.getString(actual_image_column_index);
            fileList.add(( Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, fileName )));
            //fileName = ( Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, fileName ).toString() );
        }
        return fileList;
    }
    catch ( Exception e )
    {
        return null;
    }
}

然后,您可以运行一个for循环,该循环一个接一个地上传文件。

ArrayList<Uri> fileName = getFileList();

for ( int i = 0 ; i < fileName.size() ; i++ )
{
    HttpUploader uploader = new HttpUploader();

    try {
        uploader.execute(getRealPathFromURI(fileName.get(i))).get();
        Thread.sleep(1000);       // a pause of 1 sec befor uploading next image.
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM