zoukankan      html  css  js  c++  java
  • okhttp 调用相机 上传服务器

    MainActivity

    package com.bwie.lianxi1;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.provider.MediaStore;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.view.ActionMode;
    import android.view.View;
    
    import okhttp3.Cache;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URLDecoder;
    import java.util.concurrent.TimeUnit;
    import okhttp3.CacheControl;
    import okhttp3.Callback;
    import okhttp3.Call;
    import okhttp3.FormBody;
    import okhttp3.MediaType;
    import okhttp3.MultipartBody;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.RequestBody;
    import okhttp3.Response;
    import okhttp3.ResponseBody;
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    toPhoto();
                }
            });
            findViewById(R.id.bt2).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    toCamera();
                }
            });
            cache();
        }
        public void synchronousMethod(){
         new Thread(new Runnable() {
                @Override
              public void run() {
                      try {
                                OkHttpClient client = new OkHttpClient();
                          Request request = new Request.Builder().url("https://publicobject.com/helloworld.txt").build();
    
                              Call call =  client.newCall(request);
                             //同步
                               Response response =  call.execute() ;
                                   if(response.isSuccessful()){
                                         ResponseBody body =  response.body() ;
                                             String result =  body.string() ;
                                        System.out.println("result = " + result);
                      }
    
    
                    } catch (IOException e) {
                       e.printStackTrace();
                       }
    
                       }
            }).start();
    
                }
        public void asynchronousGet(){
              // http://www.baidu.com/aaaa/
              // http://www.baidu1.com/aaaa/
               // http://www.baidu.com/aaaa/
    
    
               // http://www.baidu2.com/aaaa/
          try {
                      OkHttpClient client = new OkHttpClient();
    
    
                         Request request = new Request.Builder()
                          .url("http://publicobject.com/helloworld.txt")
                         .header("key","value")
                           .header("key","value1")
                              .addHeader("Connection","Keep-Alive")
                                .addHeader("Connection","Keep-Alive1")
                                .build();
                    Call call =  client.newCall(request);
    
    
                             call.enqueue(new Callback() {
                   @Override
                 public void onFailure(Call call, IOException e) {
                          }
                 @Override
               public void onResponse(Call call, Response response) throws IOException {
    
    
    
    
                             String result =   response.body().string() ;
                            System.out.println("result = " + result);
    
    
                             }
                });
            } catch (Exception e) {
                   e.printStackTrace();
                }
        }
        public static final MediaType MEDIA_TYPE_MARKDOWN=MediaType.parse("text/x-markdown; charset=utf-8");
        public void postString(){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        File file = new File("本地图片路径");
                        OkHttpClient client=new OkHttpClient();
                        Request request=new Request.Builder().url("https://api.github.com/markdown/raw")
                                .post(RequestBody.create(MEDIA_TYPE_MARKDOWN,file)).build();
                        Response response = client.newCall(request).execute();
                        if(response.isSuccessful()){
                            String result =   response.body().string() ;
                          System.out.println("result = " + result);
    
                                             }
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        public void postFile(File file){
    
                   //  sdcard/dliao/aaa.jpg
                  String path =  file.getAbsolutePath() ;
                   String [] split =  path.split("\/");
                   MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
                 OkHttpClient client = new OkHttpClient();
                    RequestBody requestBody = new MultipartBody.Builder()
                            .setType(MultipartBody.FORM)
            //                file
                            .addFormDataPart("imageFileName",split[split.length-1])
                           .addFormDataPart("image",split[split.length-1],RequestBody.create(MEDIA_TYPE_PNG,file))
                          .build();
    
                  Request request = new Request.Builder().post(requestBody).url("http://qhb.2dyt.com/Bwei/upload").build();
    
                  client.newCall(request).enqueue(new Callback() {
                @Override
               public void onFailure(Call call, IOException e) {
    
                               }
    
                       @Override
              public void onResponse(Call call, Response response) throws IOException {
    
                                    System.out.println("response = " + response.body().string());
    
                         }
             });
    
    
               }
    
        static final int INTENTFORCAMERA = 1 ;
        static final int INTENTFORPHOTO = 2 ;
              public String LocalPhotoName;
         public String createLocalPhotoName() {
                 LocalPhotoName = System.currentTimeMillis() + "face.jpg";
                 return  LocalPhotoName ;
                }
        public void toCamera(){
                 try {
                       Intent intentNow = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                     Uri uri = null ;
               //            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {  //针对Android7.0,需要通过FileProvider封装过的路径,提供给外部调用
               //                uri = FileProvider.getUriForFile(UploadPhotoActivity.this, "com.bw.dliao", SDCardUtils.getMyFaceFile(createLocalPhotoName()));//通过FileProvider创建一个content类型的Uri,进行封装
             //            }else {
                     uri = Uri.fromFile(SDCardUtils.getMyFaceFile(createLocalPhotoName())) ;
               //      }
                     intentNow.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                     startActivityForResult(intentNow, INTENTFORCAMERA);
                  } catch (Exception e) {
                     e.printStackTrace();
                 }
               }
    
        /**
         360      * 打开相册
         361      */
         public void toPhoto() {
             try {
                 createLocalPhotoName();
                 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
                 getAlbum.setType("image/*");
                 startActivityForResult(getAlbum, INTENTFORPHOTO);
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
             @Override
                 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                          super.onActivityResult(requestCode, resultCode, data);
    
    
                        switch (requestCode) {
                              case INTENTFORPHOTO:
                                        //相册
                                       try {
                                                 // 必须这样处理,不然在4.4.2手机上会出问题
                                                 Uri originalUri = data.getData();
                                                 File f = null;
                                                if (originalUri != null) {
                                                       f = new File(SDCardUtils.photoCacheDir, LocalPhotoName);
                                                          String[] proj = {MediaStore.Images.Media.DATA};
                                                         Cursor actualimagecursor =  this.getContentResolver().query(originalUri, proj, null, null, null);
                                                       if (null == actualimagecursor) {
                                                             if (originalUri.toString().startsWith("file:")) {
                                                                      File file = new File(originalUri.toString().substring(7, originalUri.toString().length()));
                                                                       if(!file.exists()){
                                                                             //地址包含中文编码的地址做utf-8编码
                                                                               originalUri = Uri.parse(URLDecoder.decode(originalUri.toString(),"UTF-8"));
                                                                               file = new File(originalUri.toString().substring(7, originalUri.toString().length()));
                                                                      }
                                                                      FileInputStream inputStream = new FileInputStream(file);
                                                                        FileOutputStream outputStream = new FileOutputStream(f);
                                                                        copyStream(inputStream, outputStream);
                                                                  }
                                                           } else {
                                                                // 系统图库
                                                              int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                                                               actualimagecursor.moveToFirst();
                                                              String img_path = actualimagecursor.getString(actual_image_column_index);
                                                                if (img_path == null) {
                                                                       InputStream inputStream = this.getContentResolver().openInputStream(originalUri);
                                                                       FileOutputStream outputStream = new FileOutputStream(f);
                                                                       copyStream(inputStream, outputStream);
                                                                 } else {
                                                                       File file = new File(img_path);
                                                                      FileInputStream inputStream = new FileInputStream(file);
                                                                    FileOutputStream outputStream = new FileOutputStream(f);
                                                                       copyStream(inputStream, outputStream);
                                                                   }
                                                       }
                                                        Bitmap bitmap = ImageResizeUtils.resizeImage(f.getAbsolutePath(), 1080);
                                                        int width = bitmap.getWidth();
                                                        int height = bitmap.getHeight();
                                                     FileOutputStream fos = new FileOutputStream(f.getAbsolutePath());
                                                       if (bitmap != null) {
    
    
                                                                 if (bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fos)) {
                                                                      fos.close();
                                                                       fos.flush();
                                                                 }
                                                                if (!bitmap.isRecycled()) {
                                                                        bitmap.isRecycled();
                                                                    }
    
    
                                                                  System.out.println("f = " + f.length());
                                                                postFile(f);
    
    
                                                            }
    
                                                    }
                                            } catch (Exception e) {
                                             e.printStackTrace();
    
    
                                          }
    
                                      break;
                              case INTENTFORCAMERA:
                          //                相机
                                       try {
                                                //file 就是拍照完 得到的原始照片
                                                 File file = new File(SDCardUtils.photoCacheDir, LocalPhotoName);
                                                Bitmap bitmap = ImageResizeUtils.resizeImage(file.getAbsolutePath(), 1080);
                                                 int width = bitmap.getWidth();
                                                int height = bitmap.getHeight();
                                                 FileOutputStream fos = new FileOutputStream(file.getAbsolutePath());
                                                 if (bitmap != null) {
                                                        if (bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fos)) {
                                                              fos.close();
                                                             fos.flush();
                                                        }
                                                       if (!bitmap.isRecycled()) {
                                                             //通知系统 回收bitmap
                                                             bitmap.isRecycled();
                                                        }
                                                   System.out.println("f = " + file.length());
    
    
                                                    postFile(file);
                                                  }
                                          } catch (Exception e) {
                                             e.printStackTrace();
                                         }
    
    
                                        break;
                            }
    
    
                   }
        public static void copyStream(InputStream inputStream, OutputStream outStream) throws Exception {
                    try {
                            byte[] buffer = new byte[1024];
                           int len = 0;
                        while ((len = inputStream.read(buffer)) != -1) {
                                  outStream.write(buffer, 0, len);
                              }
                            outStream.flush();
                        } catch (IOException e) {
                           e.printStackTrace();
                        }finally {
                         if(inputStream != null){
                                  inputStream.close();
                              }
                         if(outStream != null){
                                outStream.close();
                           }
                     }
    
              }
    
                public void post(){
    
                OkHttpClient client = new OkHttpClient();
    
                   RequestBody requestBody = new FormBody.Builder()
                         .add("username","1507D")
                           .add("password","1507D")
                         .add("postkey","1503")
                          .build();
    
                    Request request = new Request.Builder().url("http://qhb.2dyt.com/Bwei/login")
                           .post(requestBody).build();
    
                   client.newCall(request).enqueue(new Callback() {
                @Override
               public void onFailure(Call call, IOException e) {
    
    
                             }
    
                     @Override
                 public void onResponse(Call call, Response response) throws IOException {
                      System.out.println("response = " + response.body().string());
                              }
             });
    
               }
    
               public void cache(){
    
    
                 new Thread(new Runnable() {
                @Override
              public void run() {
                              try {
                                            int cacheSize = 10 * 1024 * 1024; // 10 MiB
                                            Cache cache = new Cache(getCacheDir(), cacheSize);
                                             OkHttpClient client = new OkHttpClient.Builder()
                                                    .addInterceptor(new LoggingInterceptor())
                                                     .cache(cache)
                                                     .build();
                                            Request request = new Request.Builder()
                                                    .cacheControl(CacheControl.FORCE_NETWORK)
                                                    .url("http://publicobject.com/helloworld.txt")
                                                    .build();
                                            String response1Body;
                                            Response response1 = client.newCall(request).execute();
                         //        () {
                                             if (!response1.isSuccessful()) throw new IOException("Unexpected code " + response1);
                                             response1Body = response1.body().string();
                                             System.out.println("Response 1 response:          " + response1);
                                            System.out.println("Response 1 cache response:    " + response1.cacheResponse());
                                            System.out.println("Response 1 network response:  " + response1.networkResponse());
                         //        }
                                            String response2Body;
                         //
                         // {
                         //                    Response response2 = client.newCall(request).execute();
                         //
                         //
                         ////                   Call call1 =   client.newCall(request);
                         ////
                         ////                    call1.cancel();
                         //
                         //                    if (!response2.isSuccessful()) throw new IOException("Unexpected code " + response2);
                         //
                         //                    response2Body = response2.body().string();
                         //                    System.out.println("Response 2 response:          " + response2);
                         //                    System.out.println("Response 2 cache response:    " + response2.cacheResponse());
                         //                    System.out.println("Response 2 network response:  " + response2.networkResponse());
                         //
                         //
                         //                    System.out.println("Response 2 equals Response 1? " + response1Body.equals(response2Body));
                         //
                                  }catch (Exception e) {
                                    }
                          }
        }).start();
               }
             //
               public void percall(){
                  OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).build();
                    OkHttpClient client1 = client.newBuilder().connectTimeout(10, TimeUnit.SECONDS).build();
                   OkHttpClient client2 = client.newBuilder().connectTimeout(100, TimeUnit.SECONDS).build();
            //        client.newCall()
                }
           }
    LoggingInterceptor
    package com.bwie.lianxi1;
    
    import java.io.IOException;
    
    import okhttp3.Interceptor;
    import okhttp3.Request;
    import okhttp3.Response;
    
    class LoggingInterceptor implements Interceptor {
      @Override public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
    
        long t1 = System.currentTimeMillis();
    
    
        Response response = chain.proceed(request);
    
        long t2 = System.currentTimeMillis();
    
        System.out.println("t2 = " +( t2-t1));
    
    
        return response;
      }
    }
    ImageResizeUtils
    package com.bwie.lianxi1;

    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.media.ExifInterface;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;

    import static android.graphics.BitmapFactory.decodeFile;

    /**
    * Created by muhanxi on 17/7/6.
    */

    public class ImageResizeUtils {


    /**
    * 照片路径
    * 压缩后 宽度的尺寸
    * @param path
    * @param specifiedWidth
    */
    public static Bitmap resizeImage(String path, int specifiedWidth) throws Exception {


    Bitmap bitmap = null;
    FileInputStream inStream = null;
    File f = new File(path);
    System.out.println(path);
    if (!f.exists()) {
    throw new FileNotFoundException();
    }
    try {
    inStream = new FileInputStream(f);
    int degree = readPictureDegree(path);
    BitmapFactory.Options opt = new BitmapFactory.Options();
    //照片不加载到内存 只能读取照片边框信息
    opt.inJustDecodeBounds = true;
    // 获取这个图片的宽和高
    decodeFile(path, opt); // 此时返回bm为空



    int inSampleSize = 1;
    final int width = opt.outWidth;
    // width 照片的原始宽度 specifiedWidth 需要压缩的宽度
    // 1000 980
    if (width > specifiedWidth) {
    inSampleSize = (int) (width / (float) specifiedWidth);
    }
    // 按照 565 来采样 一个像素占用2个字节
    opt.inPreferredConfig = Bitmap.Config.RGB_565;
    // 图片加载到内存
    opt.inJustDecodeBounds = false;
    // 等比采样
    opt.inSampleSize = inSampleSize;
    // opt.inPurgeable = true;
    // 容易导致内存溢出
    bitmap = BitmapFactory.decodeStream(inStream, null, opt);
    // bitmap = BitmapFactory.decodeFile(path, opt);
    if (inStream != null) {
    try {
    inStream.close();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    inStream = null;
    }
    }

    if (bitmap == null) {
    return null;
    }
    Matrix m = new Matrix();
    if (degree != 0) {
    //给Matrix 设置旋转的角度
    m.setRotate(degree);
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
    }
    float scaleValue = (float) specifiedWidth / bitmap.getWidth();
    // 等比压缩
    m.setScale(scaleValue, scaleValue);
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
    return bitmap;
    } catch (OutOfMemoryError e) {
    e.printStackTrace();
    return null;
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }


    }


    /**
    * 读取图片属性:旋转的角度
    *
    * @param path 源信息
    * 图片绝对路径
    * @return degree旋转的角度
    */
    public static int readPictureDegree(String path) {
    int degree = 0;
    try {
    ExifInterface exifInterface = new ExifInterface(path);
    int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
    switch (orientation) {
    case ExifInterface.ORIENTATION_ROTATE_90:
    degree = 90;
    break;
    case ExifInterface.ORIENTATION_ROTATE_180:
    degree = 180;
    break;
    case ExifInterface.ORIENTATION_ROTATE_270:
    degree = 270;
    break;
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    return degree;
    }


    public static void copyStream(InputStream inputStream, OutputStream outStream) throws Exception {
    try {
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) {
    outStream.write(buffer, 0, len);
    }
    outStream.flush();
    } catch (IOException e) {
    e.printStackTrace();
    }finally {
    if(inputStream != null){
    inputStream.close();
    }
    if(outStream != null){
    outStream.close();
    }
    }

    }



    }
    SDCardUtils
    package com.bwie.lianxi1;
    
    import android.os.Environment;
    import android.os.StatFs;
    
    import java.io.File;
    import java.io.IOException;
    
    
    public class SDCardUtils {
    
    
        public static final String DLIAO = "dliao" ;
    
        public static File photoCacheDir = SDCardUtils.createCacheDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + DLIAO);
        public static String cacheFileName = "myphototemp.jpg";
    
    
    
        public static boolean isSDCardExist() {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                return true;
            } else {
                return false;
            }
        }
    
        public static void delFolder(String folderPath) {
            try {
                delAllFile(folderPath);
                String filePath = folderPath;
                filePath = filePath.toString();
                File myFilePath = new File(filePath);
                myFilePath.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static boolean delAllFile(String path) {
            boolean flag = false;
            File file = new File(path);
            if (!file.exists()) {
                return flag;
            }
            if (!file.isDirectory()) {
                return flag;
            }
            String[] tempList = file.list();
            File temp = null;
            for (int i = 0; i < tempList.length; i++) {
                if (path.endsWith(File.separator)) {
                    temp = new File(path + tempList[i]);
                } else {
                    temp = new File(path + File.separator + tempList[i]);
                }
                if (temp.isFile()) {
                    temp.delete();
                }
                if (temp.isDirectory()) {
                    delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
                    delFolder(path + "/" + tempList[i]);// 再删除空文件夹
                    flag = true;
                }
            }
            return flag;
        }
    
        public static boolean deleteOldAllFile(final String path) {
            try {
                new Thread(new Runnable() {
    
                    @Override
                    public void run() {
                        delAllFile(Environment.getExternalStorageDirectory() + File.separator + DLIAO);
                    }
                }).start();
    
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
    
        /**
         * 给定字符串获取文件夹
         * 
         * @param dirPath
         * @return 创建的文件夹的完整路径
         */
        public static File createCacheDir(String dirPath) {
            File dir = new File(dirPath);;
            if(isSDCardExist()){
                if (!dir.exists()) {
                    dir.mkdirs();
                }
            }
            return dir;
        }
    
        public static File createNewFile(File dir, String fileName) {
            File f = new File(dir, fileName);
            try {
                // 出现过目录不存在的情况,重新创建
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return f;
        }
    
        public static File getCacheFile() {
            return createNewFile(photoCacheDir, cacheFileName);
        }
    
        public static File getMyFaceFile(String fileName) {
            return createNewFile(photoCacheDir, fileName);
        }
    
        /**
         * 获取SDCARD剩余存储空间
         *
         * @return 0 sd已被挂载占用  1 sd卡内存不足 2 sd可用
         */
        public static int getAvailableExternalStorageSize() {
            if (isSDCardExist()) {
                File path = Environment.getExternalStorageDirectory();
                StatFs stat = new StatFs(path.getPath());
                long blockSize = stat.getBlockSize();
                long availableBlocks = stat.getAvailableBlocks();
                long memorySize = availableBlocks * blockSize;
                if(memorySize < 10*1024*1024){
                    return 1;
                }else{
                    return 2;
                }
            } else {
                return 0;
            }
        }
    }

    权限

      <uses-permission android:name="android.permission.INTERNET" />
         <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    
  • 相关阅读:
    真情感动看上海新闻娱乐频道“百家心”
    Treeview Navigation Web Part for SharePoint with SmartPart v1.0
    轻松玩转Typed DataSet, Part III
    微软Avalon和WinForms的发展蓝图
    Proxy Pattern using C#
    System.Threading.Timer类的TimerCallback 委托
    SmartPart v1.0 for SharePoint [Free Web Part]
    分布式应用架构中的数据传输对象(DTO)
    定制SharePoint Portal Server 2003站点的向导
    Bridge Pattern using C#
  • 原文地址:https://www.cnblogs.com/shangliang88/p/7607381.html
Copyright © 2011-2022 走看看