Android文件上传下载实战指南

0 下载量 161 浏览量 更新于2024-09-01 收藏 57KB PDF 举报
"Android Http实现文件的上传和下载" 在Android应用开发中,文件的上传和下载是常见的功能需求,通常涉及网络通信。本篇内容将详细讲解如何使用Http实现Android中的文件上传和下载操作。 文件上传: 在Android中,我们可以借助Apache HttpClient库来实现文件上传。首先,确保在项目中添加了Apache HttpClient的相关依赖。以下是一个简单的文件上传示例: ```java public void uploadFile(Context mContext, String targetUrl, final String filePath) { System.out.println("targetUrl: " + targetUrl + " filePath: " + filePath); if (TextUtils.isEmpty(filePath)) { Toast.makeText(mContext, "文件不存在", Toast.LENGTH_SHORT).show(); return; } PostMethod filePost = new PostMethod(targetUrl) { // 解决中文乱码问题 @Override public String getRequestCharSet() { return "UTF-8"; } }; try { HttpClient client = new HttpClient(); File file = new File(filePath); if (file.exists() && file.isFile()) { long fileSize = file.length(); if (fileSize >= 5 * 1024 * 1024) { Toast.makeText(mContext, "文件不得大于5M", Toast.LENGTH_SHORT).show(); return; } Part[] parts = {new FilePart("file", file)}; filePost.setRequestEntity(new MultipartRequestEntity(parts, client.getParams())); int status = client.executeMethod(filePost); if (status == HttpStatus.SC_OK) { // 文件上传成功,处理响应 } else { // 文件上传失败,处理错误 } } else { Toast.makeText(mContext, "文件不存在", Toast.LENGTH_SHORT).show(); } } catch (IOException e) { // 处理网络异常 e.printStackTrace(); } finally { filePost.releaseConnection(); } } ``` 在这个例子中,我们创建了一个`PostMethod`对象,并设置了请求字符集为UTF-8以防止中文乱码。然后,我们创建一个`FilePart`对象,将文件作为请求体的一部分。最后,使用`HttpClient`执行方法并检查返回的状态码以确定上传是否成功。 文件下载: 文件下载通常涉及HTTP的GET请求,可以使用`HttpGet`类来实现。以下是一个基本的文件下载示例: ```java public void downloadFile(Context mContext, String downloadUrl, String savePath) { try { HttpClient client = new HttpClient(); GetMethod getMethod = new GetMethod(downloadUrl); int status = client.executeMethod(getMethod); if (status == HttpStatus.SC_OK) { InputStream is = getMethod.getResponseBodyAsStream(); FileOutputStream fos = new FileOutputStream(new File(savePath)); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } fos.close(); is.close(); // 下载完成,处理保存路径 } else { // 下载失败,处理错误 } } catch (IOException e) { // 处理网络异常 e.printStackTrace(); } finally { getMethod.releaseConnection(); } } ``` 在这个示例中,我们创建了一个`GetMethod`对象,设置下载URL,然后执行HTTP GET请求。如果请求成功,我们将响应流读取并写入到本地文件。 需要注意的是,由于Android版本的更新,原生的Apache HttpClient库在某些版本中已被弃用。对于较新的Android版本,建议使用OkHttp或者Retrofit等现代的网络库进行文件的上传和下载,这些库提供了更强大的功能和更好的性能。同时,为了提供更好的用户体验,记得在后台线程中处理文件的上传和下载,避免阻塞主线程。