Android(安卓)使用AsyncHttpClient文件上传与下载
16lz
2022-05-29
/** * 异步传输工具 * * @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】第一个程序,点按钮显示Hello World
- Android(安卓)studio 学习资料汇总
- [Android]读取properties配置文件.
- Android中创建文件以及文件夹
- android WebView 拍照上传图片兼容
- Android常用语句收集
- Android将assets中的zip压缩文件解压到SD卡
- android上传文件
- NPM 和webpack 的基础使用