国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android實現上傳本地圖片到網絡功能

2019-10-22 18:27:03
字體:
來源:轉載
供稿:網友

本文實例為大家分享了android上傳本地圖片到網絡的具體代碼,供大家參考,具體內容如下

首先這里用到了Okhttp 所以需要一個依賴:

compile 'com.squareup.okhttp3:okhttp:3.9.0'

xml布局

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:app="http://schemas.android.com/apk/res-auto"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:orientation="vertical"   android:layout_height="match_parent"   tools:context="com.bwei.czx.czx10.MainActivity">    <Button     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:id="@+id/photo"/>     <Button     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:id="@+id/camear"/>  </LinearLayout> 

AndroidManifest.xml中:權限

<uses-permission android:name="android.permission.INTERNET"/>   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

MainActivity中:

oncreat:

@Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     findViewById(R.id.photo).setOnClickListener(new View.OnClickListener() {       @Override       public void onClick(View view) {          toPhoto();       }     });       findViewById(R.id.camear).setOnClickListener(new View.OnClickListener() {       @Override       public void onClick(View view) {          toCamera();       }     });     } 

和oncreat同級的方法:

 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();     }   }       /**    * 打開相冊    */   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();       }     }    } 

ImageResizeUtils中:

package com.bwei.czx.czx10;  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 czx on 2017/9/27.  */  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.bwei.czx.czx10;  import android.os.Environment; import android.os.StatFs;  import java.io.File; import java.io.IOException;  /**  * Created by czx on 2017/9/27.  */  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;     }   } } 

這樣就可以上傳圖片到網絡了!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 婺源县| 孝义市| 阜新| 洛阳市| 分宜县| 浪卡子县| 宝清县| 梁山县| 屏山县| 隆子县| 吉木乃县| 石林| 望谟县| 永善县| 衡南县| 漳浦县| 乌海市| 温宿县| 微山县| 石渠县| 泉州市| 长海县| 城固县| 隆化县| 灵川县| 沾益县| 顺义区| 铁岭县| 平舆县| 昭觉县| 浑源县| 吉木乃县| 庄浪县| 莎车县| 沅陵县| 湘阴县| 海伦市| 达州市| 阿拉尔市| 集安市| 耒阳市|