Android 使用AsyncHttpClient文件上传与下载

/**
 * 异步传输工具
 * 
 * @author chen.lin
 * 
 */
@SuppressWarnings("deprecation")
public class AsyncHttpUtil {

    private static boolean isSuccess = false;

    /**
     * 异步上传文件
     * 
     * @param path
     *            :文件路径
     * @param url
     *            :上传的url
     */
    public static boolean uploadFile(final Context context, String path, String url, String filename,
            final ProgressDialog progress) throws Exception {
        File file = new File(path);
        if (file.exists() && file.length() > 0) {
            AsyncHttpClient client = new AsyncHttpClient();
            RequestParams params = new RequestParams();
            params.put("uploadfile", file);
            params.put("newFilename", filename);

            // 设置进度条最大值
            progress.setMax(Integer.parseInt(file.length() + ""));

            // 上传文件
            client.post(url, params, new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                    // 上传成功后要做的工作
                    progress.dismiss();
                    Toast.makeText(context, "上传成功", Toast.LENGTH_LONG).show();
                    // progress.setProgress(0);
                    isSuccess = true;
                }

                @Override
                public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                    progress.dismiss();
                    Toast.makeText(context, "上传失败", Toast.LENGTH_LONG).show();
                    isSuccess = false;
                }

                @Override
                public void onProgress(long bytesWritten, long totalSize) {
                    int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);
                    // 上传进度显示
                    progress.setProgress(count);
                    super.onProgress(bytesWritten, totalSize);
                }

                @Override
                public void onRetry(int retryNo) {
                    super.onRetry(retryNo);
                    // 返回重试次数
                }
            });

        } else {
            progress.dismiss();
            Toast.makeText(context, "文件不存在", Toast.LENGTH_LONG).show();
        }
        return isSuccess;

    }

    /**
     * @param url
     *            要下载的文件URL
     * @throws Exception
     */
    public static void downloadFile(final Context mContext, String url, final ProgressDialog progress) throws Exception {

        AsyncHttpClient client = new AsyncHttpClient();
        // 指定文件类型
        String[] fileTypes = new String[] { "image/png", "image/jpeg" };
        // 获取二进制数据如图片和其他文件
        client.get(url, new BinaryHttpResponseHandler(fileTypes) {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] binaryData) {
                String tempPath = Environment.getExternalStorageDirectory().getPath() + "/temp.jpg";
                // TODO Auto-generated method stub
                // 下载成功后需要做的工作
                progress.setProgress(0);
                //
                Logger.e("binaryData:", "共下载了:" + binaryData.length);
                //
                Bitmap bmp = BitmapFactory.decodeByteArray(binaryData, 0, binaryData.length);

                File file = new File(tempPath);
                // 压缩格式
                CompressFormat format = Bitmap.CompressFormat.JPEG;
                // 压缩比例
                int quality = 100;
                try {
                    // 若存在则删除
                    if (file.exists())
                        file.delete();
                    // 创建文件
                    file.createNewFile();
                    //
                    OutputStream stream = new FileOutputStream(file);
                    // 压缩输出
                    bmp.compress(format, quality, stream);
                    // 关闭
                    stream.close();
                    //
                    Toast.makeText(mContext, "下载成功\n" + tempPath, Toast.LENGTH_LONG).show();

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] binaryData, Throwable error) {
                Toast.makeText(mContext, "下载失败", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onProgress(long bytesWritten, long totalSize) {
                int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);
                // 下载进度显示
                progress.setProgress(count);
                Logger.e("下载 Progress>>>>>", bytesWritten + " / " + totalSize);
                super.onProgress(bytesWritten, totalSize);
            }

            @Override
            public void onRetry(int retryNo) {
                super.onRetry(retryNo);
                // 返回重试次数
            }

        });
    }

}

———————————————————————
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
有需求者请进站查看,非诚勿扰

https://item.taobao.com/item.htm?spm=686.1000925.0.0.4a155084hc8wek&id=555888526201

01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
——————————————————————–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值