Android客户端多文件上传

在web开发中,多文件上传时是非常方便的,直接使用Http协议提交数据即可。格式如下:

   <FORM METHOD=POST ACTION="http://192.168.1.101:8083/upload/servlet/UploadServlet" enctype="multipart/form-data">
            <INPUT TYPE="text" NAME="name">
            <INPUT TYPE="text" NAME="id">
            <input type="file" name="imagefile"/>
            <input type="file" name="zip"/>
         </FORM>

但是在Android客户端中,如果文本和文件一起上传时就比较麻烦,需要对Http协议很熟悉才可以做到的。

一、HTTP协议

HTTP协议是一个很很复杂的过程,我们在做web开发时,底层其实都已经封装好了,可以使用即可,我们所需要做的就是对HTTP请求格式很熟悉。
HTTP协议分为 请求方法 URI 协议 / 版本,请求头,请求体。
<span style="white-space:pre">	</span>GET/sample.jspHTTP/1.1                    //请求方法/请求路径/协议版本


<span style="white-space:pre">	</span>Accept:image/gif.image/jpeg,*/*          
<span style="white-space:pre">	</span>Accept-Language:zh-cn
<span style="white-space:pre">	</span>Connection:Keep-Alive
<span style="white-space:pre">	</span>Host:localhost
<span style="white-space:pre">	</span>User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
<span style="white-space:pre">	</span>Accept-Encoding:gzip,deflate


<span style="white-space:pre">	</span>username=jinqiao&password=1234
这是一个完整的HTTP请求。
请求的协议头主要包括以下一些内容:
请求头和请求体中间有一个空格,这个空格表示请求头已经结束,下面的是请求体。
响应头:
这即为整个的HTTP请求。

二、Android中的多文件上传

Android中使用HTTP GET或者POST方法提交数据在前文已经介绍过了。
代码在struts上传文件一文中已经贴出来了。

在代码中 ,我们需要自己动手完整的构造出整个HTTP请求的格式。
但有一个不同的地方;
首先是Content-Type:multipart/form-data;boundary=---------------------------7da2137580612;
因为表单类型为: multipart/form-data,上传文件使用的不在是HTTP协议,不在是name="--"的方式了,而是使用
分隔符
字段内容
分隔符
字段内容
比如:
请求头
---------------------------7da2137580612

Content-Disposition:form-data;name=“username”


zhuzg

---------------------------7da2137580612
Content-Disposition:form-data;name=“imagefilename=“123.jpg”
Content-Type:application/octet-stream

---------------------------7da2137580612----------- //结束标志

(P.S.:后来在别的地方看到一篇类似的文章,附上链接: HTTP基础知识
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用阿里云官方提供的 OSS(对象存储服务)SDK 来实现 Android 上的文件上传功能。以下是一个简单的示例代码,需要先引入阿里云 OSS SDK 的依赖: ```java implementation 'com.aliyun.dpa:oss-android-sdk:3.1.8' ``` 然后,在你的代码中使用以下方法来实现文件上传: ```java import com.aliyun.dpa.oss.app.AppServiceFactory; import com.aliyun.dpa.oss.app.OSSClientFactory; import com.aliyun.dpa.oss.app.RunningConfig; import com.aliyun.dpa.oss.app.ServiceFactory; import com.aliyun.dpa.oss.app.UploadConfiguration; import com.aliyun.dpa.oss.app.UploadConfigurationFactory; import com.aliyun.dpa.oss.app.UploadManager; import com.aliyun.dpa.oss.app.util.FileUtil; import com.aliyun.dpa.oss.app.util.StringUtil; import com.aliyun.dpa.oss.app.util.UIUtil; import com.aliyun.dpa.oss.callback.ResultCallback; import com.aliyun.dpa.oss.model.OSSUploadConfiguration; import com.aliyun.dpa.oss.task.PutObjectTask; import com.aliyun.dpa.oss.task.TaskCancelledException; public class AliOSSUploader { private static final String ENDPOINT = "your_oss_endpoint"; // 你的 OSS Endpoint private static final String ACCESS_KEY_ID = "your_access_key_id"; // 你的 Access Key ID private static final String ACCESS_KEY_SECRET = "your_access_key_secret"; // 你的 Access Key Secret private static final String BUCKET_NAME = "your_bucket_name"; // 你的 Bucket 名称 public void uploadFile(String filePath) { // 创建 OSS 客户端 RunningConfig runningConfig = new RunningConfig(ACCESS_KEY_ID, ACCESS_KEY_SECRET, ENDPOINT); AppServiceFactory.init(runningConfig); ServiceFactory serviceFactory = OSSClientFactory.createServiceFactory(); UploadConfiguration configuration = UploadConfigurationFactory.getUploadConfiguration(); UploadManager uploadManager = serviceFactory.createUploadManager(configuration); // 构造上传任务 PutObjectTask putObjectTask = new PutObjectTask(BUCKET_NAME, StringUtil.generateRandomKey(), filePath); // 设置上传结果回调 putObjectTask.setResultCallback(new ResultCallback() { @Override public void onSuccess(Object object) { // 文件上传成功 UIUtil.showToast("文件上传成功"); } @Override public void onFailure(Exception e) { // 文件上传失败 UIUtil.showToast("文件上传失败:" + e.getMessage()); } @Override public void onProgress(Object object, long currentSize, long totalSize) { // 文件上传进度 int progress = (int) (currentSize * 100 / totalSize); UIUtil.showToast("文件上传进度:" + progress + "%"); } @Override public void onCancel(Object object) { // 文件上传取消 UIUtil.showToast("文件上传取消"); } }); // 开始上传任务 try { uploadManager.upload(putObjectTask); } catch (TaskCancelledException e) { // 上传任务取消 UIUtil.showToast("文件上传取消"); } } } ``` 以上代码中的 `your_oss_endpoint`、`your_access_key_id`、`your_access_key_secret` 和 `your_bucket_name` 分别是你的 OSS Endpoint、Access Key ID、Access Key Secret 和 Bucket 名称。你需要将它们替换为你自己的实际值。 调用 `uploadFile` 方法并传入要上传的文件路径,即可实现文件上传到阿里云 OSS。记得在 AndroidManifest.xml 中添加网络权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 希望对你有帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值