Glide下載圖片並保存到本地

      Observable.create(new ObservableOnSubscribe<File>() {
        @Override
        public void subscribe(ObservableEmitter<File> e) throws Exception {
            //通過gilde下載得到file文件,這裏需要注意android.permission.INTERNET權限
            e.onNext(Glide.with(mContext)
                    .load(imagePathList.get(currentViewPosition).getPath())
                    .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                    .get());
            e.onComplete();
        }
    }).subscribeOn(Schedulers.io())
            .observeOn(Schedulers.newThread())
            .subscribe(new Consumer<File>() {
        @Override
        public void accept(File file) throws Exception {
            //獲取到下載得到的圖片,進行本地保存
            File pictureFolder = Environment.getExternalStorageDirectory();
            //第二個參數爲你想要保存的目錄名稱
            File appDir = new File(pictureFolder, "your_picture_save_path");
            if (!appDir.exists()) {
                appDir.mkdirs();
            }
            String fileName = System.currentTimeMillis() + ".jpg";
            File destFile = new File(appDir, fileName);
            //把gilde下載得到圖片複製到定義好的目錄中去
            copy(file, destFile);

            // 最後通知圖庫更新
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                    Uri.fromFile(new File(destFile.getPath()))));
        }
    });
帶上覆制文件的方法:
 /**
     * 複製文件
     *
     * @param source 輸入文件
     * @param target 輸出文件
     */
    public void copy(File source, File target) {
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            fileInputStream = new FileInputStream(source);
            fileOutputStream = new FileOutputStream(target);
            byte[] buffer = new byte[1024];
            while (fileInputStream.read(buffer) > 0) {
                fileOutputStream.write(buffer);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
最後需要注意的下載保存需要讀寫權限,6.0以後需手動申請權限
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章