Android文件上传下载实现详解

1 下载量 44 浏览量 更新于2024-08-29 收藏 62KB PDF 举报
"这篇文章主要介绍了如何在Android平台上实现文件的上传和下载功能,作者通过整理网络上的代码并修正问题,提供了详细的实现方法。文件上传部分使用了`org.apache.commons.httpclient.HttpClient`库来完成,而文件下载的部分没有在摘要中给出具体实现,但可以推测会涉及HTTP请求和文件流的处理。" 在Android应用开发中,文件的上传和下载是常见的需求,特别是在涉及到用户交互和数据同步的场景。本文以文件上传为例,讲解如何使用`HttpClient`库进行实现。`HttpClient`是Apache提供的一款强大的HTTP客户端工具,可以处理复杂的HTTP请求,包括文件上传。 首先,要使用`HttpClient`,你需要添加对应的依赖库。由于Android Studio现在推荐使用`HttpURLConnection`或`OkHttp`等现代库,`HttpClient`已经在较新的Android版本中被弃用,但仍然可以通过添加第三方依赖或者使用旧版Android SDK来使用它。 文件上传的核心代码如下: ```java public void uploadFile(final Activity mContext, String targetUrl, final String filePath) { // 检查文件是否存在 if (TextUtils.isEmpty(filePath)) { Toast.makeText(mContext, "文件不存在", Toast.LENGTH_SHORT).show(); return; } PostMethod filePost = new PostMethod(targetUrl) { // 这个用来处理中文乱码 public String getRequestCharSet() { return "UTF-8"; } }; try { HttpClient client = new HttpClient(); // 创建HttpClient对象 File file = new File(filePath); // 检查文件是否是有效的文件且大小不超过5MB if (file.exists() && file.isFile() && file.length() < 5 * 1024 * 1024) { // 创建上传的文件Part Part[] parts = new Part[]{new CustomPart("file", file.getName(), new FileInputStream(file))}; // 设置上传的参数 filePost.setRequestBody(parts); // 执行上传请求 int statusCode = client.executeMethod(filePost); if (statusCode != HttpStatus.SC_OK) { Toast.makeText(mContext, "上传失败,状态码:" + statusCode, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(mContext, "上传成功", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(mContext, "文件不存在或大于5M", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); Toast.makeText(mContext, "上传过程中出现错误", Toast.LENGTH_SHORT).show(); } finally { // 释放连接资源 filePost.releaseConnection(); } } class CustomPart extends FilePart { public CustomPart(String name, String fileName, InputStream inputStream) throws IOException { super(name, fileName, inputStream, "application/octet-stream"); } } ``` 在上述代码中,`CustomPart`类是自定义的`FilePart`子类,用于处理文件上传。`Part`对象包含了文件的信息和输入流,然后设置到`PostMethod`的请求体中。执行`executeMethod`方法后,服务器将接收文件并返回一个状态码,根据状态码判断上传是否成功。 虽然`HttpClient`已经被弃用,但如果你需要支持较旧的Android版本或对性能要求不高,它仍然是一个可行的选择。在实际开发中,建议使用更现代的库如`Retrofit`、`Volley`或`OkHttp`,这些库提供了更简洁的API和更好的性能与兼容性。 至于文件下载,通常会涉及到创建HTTP GET请求,使用输出流将服务器返回的数据写入本地文件。这通常包括设置请求头、创建HTTP连接、读取响应流,并将其写入本地文件。由于摘要中并未提供具体的下载代码,这部分实现需要开发者自行补充。可以参考以下步骤: 1. 创建`HttpGet`对象并设置目标URL。 2. 创建`HttpClient`对象并执行GET请求。 3. 获取响应并检查状态码。 4. 创建本地文件并打开输出流。 5. 将响应流的数据写入本地文件。 6. 关闭所有流并释放资源。 在实际开发中,为了提高用户体验,还可能需要考虑进度显示、多线程下载、断点续传等功能。