上传到服务器的android图片 [英] Uploading Images to Server android

查看:130
本文介绍了上传到服务器的android图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道这是要上传图片到服务器,而不会失去其质量的最佳途径。 我已搜查谷歌上找到发布数据的各种方法。但我不知道哪一个会是最好的上传。 我碰到

  1. 在多部分图片上传。
  2. 上传使用的字节数组图像
  3. 上传使用Base64 EN codeD字符串的图像。

我曾尝试Base64编码它使我OOM(内存不足),如果图像是过高的分辨率。 这解决这一问题的任何教程将AP preciated。 提前致谢。

解决方案

 意图photoPickerIntent =新的意图(Intent.ACTION_PICK);
            photoPickerIntent.setType(图像/ *);
            startActivityForResult(photoPickerIntent,1);
 

高于code选择映像从画廊

  @覆盖
        公共无效onActivityResult(INT申请code,INT结果code,意图数据){
            super.onActivityResult(要求code,因此code,数据);
            如果(要求code == 1)
                如果(结果code == Activity.RESULT_OK){
                    乌里selectedImage = data.getData();

                    字符串文件路径= getPath(selectedImage);
                    串file_extn = filePath.substring(filePath.lastIndexOf()+1。);
                    image_name_tv.setText(文件路径);

                        尝试 {
                            如果(file_extn.equals(IMG)|| file_extn.equals(JPG)|| file_extn.equals(JPEG)|| file_extn.equals(GIF)|| file_extn.equals(PNG) ){
                            //精细
                        }
                        其他{
                            // NOT IN需要的格式
                        }
                        }赶上(FileNotFoundException异常E){
                            // TODO自动生成的catch块
                            e.printStackTrace();
                        }
                }
        }

        公共字符串getPath(URI URI){
            的String []投影= {MediaColumns.DATA};
            光标光标= managedQuery(URI,投影,NULL,NULL,NULL);
            与Column_Index =光标
                    .getColumnIndexOrThrow(MediaColumns.DATA);
            cursor.moveToFirst();
            的ImagePath = cursor.getString(Column_Index中);

            返回cursor.getString(Column_Index中);
        }
 

立即发布数据使用多表格数据

  HttpClient的HttpClient的=新DefaultHttpClient();
            HttpPost httppost =新HttpPost(链接到服务器);
 

多部分表单数据

  MultipartEntity mpEntity =新MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
如果(文件路径!= NULL){
                        档案文件=新的文件(文件路径);
                        Log.d(编辑用户配置,上传:文件长度=+ file.length());
                        Log.d(编辑用户配置,上传:文件中存在=+ file.exists());
                        mpEntity.addPart(阿凡达,新FileBody(文件,应用程序/八位字节));
                    }
 

最后是POST数据到服务器

  httppost.setEntity(mpEntity);
HTT presponse响应= httpclient.execute(httppost);
 

I wanted to know which is the best way to upload image to server without loosing its quality. I have searched on google found various methods of posting data. But I am not sure which one would be best to upload. I came across

  1. Multipart Image Upload.
  2. Uploading images using byte array
  3. Uploading images using base64 encoded string.

I have tried Base64 encoding it leads me to OOM(Out of memory) if image is too high in resolution. Any tutorial which tackle this issue would be appreciated. Thanks in advance.

解决方案

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
            photoPickerIntent.setType("image/*");
            startActivityForResult(photoPickerIntent, 1);

ABOVE CODE TO SELECT IMAGE FROM GALLERY

 @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 1)
                if (resultCode == Activity.RESULT_OK) {
                    Uri selectedImage = data.getData();

                    String filePath = getPath(selectedImage);
                    String file_extn = filePath.substring(filePath.lastIndexOf(".")+1);
                    image_name_tv.setText(filePath);

                        try {
                            if (file_extn.equals("img") || file_extn.equals("jpg") || file_extn.equals("jpeg") || file_extn.equals("gif") || file_extn.equals("png")) {
                            //FINE
                        }
                        else{
                            //NOT IN REQUIRED FORMAT
                        }
                        } catch (FileNotFoundException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                }
        }

        public String getPath(Uri uri) {
            String[] projection = { MediaColumns.DATA };
            Cursor cursor = managedQuery(uri, projection, null, null, null);
            column_index = cursor
                    .getColumnIndexOrThrow(MediaColumns.DATA);
            cursor.moveToFirst();
            imagePath = cursor.getString(column_index);

            return cursor.getString(column_index);
        }

NOW POST THE DATA USING MULTIPART FORM DATA

HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("LINK TO SERVER");

Multipart FORM DATA

    MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
if (filePath !=null) {
                        File file = new File(filePath);
                        Log.d("EDIT USER PROFILE", "UPLOAD: file length = " + file.length());
                        Log.d("EDIT USER PROFILE", "UPLOAD: file exist = " + file.exists());
                        mpEntity.addPart("avatar", new FileBody(file, "application/octet"));
                    }

FINALLY POST DATA TO SERVER

httppost.setEntity(mpEntity);
HttpResponse response = httpclient.execute(httppost);

这篇关于上传到服务器的android图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆