Android 使用AsyncHttpClient文件上传与下载
2016-04-21 13:46
537 查看
/** * 异步传输工具 * * @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); // 返回重试次数 } }); } }
相关文章推荐
- 三大WEB服务器对比分析(apache ,lighttpd,nginx)
- [树链剖分 线段树 堆] BZOJ 4538 [Hnoi2016]网络
- HttpHelper
- TCP的三次握手和四次挥手
- OkHttp3详细介绍—— Android(一)
- 网络IO模型
- zabbix检测网络质量取代smokeping
- 基于Python的网络爬虫入门
- HTTP协议
- IOS学习之——NSURLConnection请求网络资源
- TCP连接状态详解
- 计算机网络(网络层)
- Android网络编程(六)OkHttp3用法全解析
- TCP连接的“三次握手”与“四次挥手”
- Java使用HttpURLConnection请求异常:java.net.SocketException: Software caused connection abort: recv failed
- OSI 七层协议参考模型 与 TCP/IP协议 实现网络模型
- 网络延时 201503-4
- 网络爬虫介绍
- 计算机网络面试题
- 前端进阶-让你升级的网络知识