您的位置:首页 > 理论基础 > 计算机网络

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

});
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: