美文网首页
HttpClient 下载图片/视频并更新相册

HttpClient 下载图片/视频并更新相册

作者: 一个冬季 | 来源:发表于2019-05-24 18:37 被阅读0次
    下载工具封装类
    /**
    * @date: 2019/5/23 0023
    * @author: gaoxiaoxiong
    * @description:图片,视频下载工具
    **/
    public class DownFileUtils {
        private String TAG = DownFileUtils.class.getSimpleName();
        private static DownFileUtils downFileUtils;
        public static DownFileUtils getInstance(){
            if (downFileUtils == null){
                downFileUtils = new DownFileUtils();
            }
            return downFileUtils;
        }
    
        /**
        * @date: 2019/5/23 0023
        * @author: gaoxiaoxiong
        * @description: 下载图片
        **/
        public File getPicFromServer(String path, Handler handler) throws Exception {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {          //如果相等的话表示当前的sdcard挂载在手机上并且是可用的
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                InputStream is = conn.getInputStream();
                long time = System.currentTimeMillis();
                File file = null;
                file = new File(FileUtils.getInstance().getDIRECTORY_PICTURESDir(), time + ".jpg");
                Log.i(TAG, file.getAbsolutePath());
                FileOutputStream fos = new FileOutputStream(file);
                BufferedInputStream bis = new BufferedInputStream(is);
                byte[] buffer = new byte[1024];
                int len;
                long total = 0;
                while ((len = bis.read(buffer)) != -1) {
                    fos.write(buffer, 0, len);
                    total += len;
                    Message message = handler.obtainMessage();
                    message.what = 0;
                    handler.sendMessage(message);
                }
                Message message = handler.obtainMessage();
                message.what = 1;
                message.obj = file.getAbsolutePath();
                handler.sendMessage(message);
                fos.close();
                bis.close();
                is.close();
                return file;
            } else {
                return null;
            }
        }
    
        /**
        * @date: 2019/5/23 0023
        * @author: gaoxiaoxiong
        * @description:下载视频,obj参数,返回带进度数字,下载成功后obj参数返回带视频成功地址的路径
        **/
        public File getVideoFromServer(String path, Handler handler) throws Exception {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {          //如果相等的话表示当前的sdcard挂载在手机上并且是可用的
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                InputStream is = conn.getInputStream();
                long time = System.currentTimeMillis();
                File file = null;
                String prefix = path.substring(path.lastIndexOf(".")+1);
                file = new File(FileUtils.getInstance().getDIRECTORY_MOVIESDir(),time+"."+prefix);
                Log.i(TAG, file.getAbsolutePath());
                FileOutputStream fos = new FileOutputStream(file);
                BufferedInputStream bis = new BufferedInputStream(is);
                byte[] buffer = new byte[1024];
                int len;
                long total = 0;
                while ((len = bis.read(buffer)) != -1) {
                    fos.write(buffer, 0, len);
                    total += len;
                    Message message = handler.obtainMessage();
                    message.what = 0;
                    //返回已经下载的量
                    float f = new BigDecimal(total / (double) conn.getContentLength()).floatValue();
                    f = f * 100;
                    message.obj = f;
                    handler.sendMessage(message);
                }
                Message message = handler.obtainMessage();
                message.what = 1;
                message.obj = file.getAbsolutePath();
                handler.sendMessage(message);
                fos.close();
                bis.close();
                is.close();
                return file;
            } else {
                return null;
            }
        }
    
     /**
        * @date: 2019/6/21 0021
        * @author: gaoxiaoxiong
        * @description:下载文件
        **/
        public File getFileFromServer(String path, Handler handler) throws Exception {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {          //如果相等的话表示当前的sdcard挂载在手机上并且是可用的
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                InputStream is = conn.getInputStream();
                //long time = System.currentTimeMillis();
                String fileName = conn.getHeaderField("Content-Disposition");
                if (fileName == null || fileName.length() < 1) {
                    // 通过截取URL来获取文件名
                    URL downloadUrl = conn.getURL(); // 获得实际下载文件的URL
                    fileName = downloadUrl.getFile();
                    fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
                } else {
                    fileName = URLDecoder.decode(fileName.substring(
                            fileName.indexOf("filename=") + 9), "UTF-8");
                    // 有些文件名会被包含在""里面,所以要去掉,不然无法读取文件后缀
                    fileName = fileName.replaceAll("\"", "");
                }
                File file = null;
                file = new File(FileUtils.getInstance().getDiskMusicCacheDir(),fileName);
                Log.i(TAG, file.getAbsolutePath());
                FileOutputStream fos = new FileOutputStream(file);
                BufferedInputStream bis = new BufferedInputStream(is);
                byte[] buffer = new byte[1024];
                int len;
                long total = 0;
                while ((len = bis.read(buffer)) != -1) {
                    fos.write(buffer, 0, len);
                    total += len;
                    Message message = handler.obtainMessage();
                    message.what = 0;
                    //返回已经下载的量
                    float f = new BigDecimal(total / (double) conn.getContentLength()).floatValue();
                    f = f * 100;
                    message.obj = f;
                    handler.sendMessage(message);
                }
                Message message = handler.obtainMessage();
                message.what = 1;
                message.obj = file.getAbsolutePath();
                handler.sendMessage(message);
                fos.close();
                bis.close();
                is.close();
                return file;
            } else {
                return null;
            }
        }
    
    }
    
    更新相册

    msg.obj表示我下载完后,图片的路径地址

      MediaScannerConnection.scanFile(fragment.getActivity(), new String[]{(String) msg.obj}, new String[]{"image/jpeg"}, new MediaScannerConnection.OnScanCompletedListener() {
                                @Override
                                public void onScanCompleted(String s, Uri uri) {
    
                                }
                            });
    
    更新视频

    msg.obj表示我下载完成后,视频的路径地址

      MediaScannerConnection.scanFile(fragment.getActivity(), new String[]{(String) msg.obj}, null, new MediaScannerConnection.OnScanCompletedListener() {
                            @Override
                            public void onScanCompleted(String s, Uri uri) {
    
                            }
                        });
    

    相关文章

      网友评论

          本文标题:HttpClient 下载图片/视频并更新相册

          本文链接:https://www.haomeiwen.com/subject/dhmyzqtx.html