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);
                // 返回重试次数
            }

        });
    }

}

你可能感兴趣的:(android,异步,download)