Android上大文件分片上传 具体怎么弄

Android上大文件分片上传 具体怎么弄,第1张

正常情况下,一般都是在长传完成后,在服务器直接保存。

?

1

2

3

4

5

6

7

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "text/plain"

//保存文件

context.Request.Files[0].SaveAs(context.Server.MapPath("~/1/" + context.Request.Files[0].FileName))

context.Response.Write("Hello World")

}

最近项目中用百度开源的上传组件webuploader,官方介绍webuploader支持分片上传。具体webuploader的使用方法见官网http://fex.baidu.com/webuploader/。

?

1

2

3

4

5

6

7

8

9

10

11

12

var uploader = WebUploader.create({

auto: true,

swf:'/webuploader/Uploader.swf',

// 文件接收服务端。

server: '/Uploader.ashx',

// 内部根据当前运行是创建,可能是input元素,也可能是flash.

pick: '#filePicker',

chunked: true,//开启分片上传

threads: 1,//上传并发数

//由于Http的无状态特征,在往服务器发送数据过程传递一个进入当前页面是生成的GUID作为标示

formData: {guid:"<%=Guid.NewGuid().ToString()%>"}

})

webuploader的分片上传是把文件分成若干份,然后向你定义的文件接收端post数据,如果上传的文件大于分片的尺寸,就会进行分片,然后会在post的数据中添加两个form元素chunk和chunks,前者标示当前分片在上传分片中的顺序(从0开始),后者代表总分片数。

我们做web开发的时候几乎都是通过一个表单来实现上传。并且是post的方式。而且都必须要加个参数enctype = "multipart/form-data".然后再上传后台用各种框架里的插件之类的就可以接收了,并没有关心过这个文件具体是怎么传的。现在用android开发 没有那些框架了,所以不得不关心一下了。

其实我们这种前后台的交互是用的HTTP协议。而http协议默认是传的字符串。所以我们上传文件的话要加enctype = "multipart/form-data"这个参数来说明我们这传的是文件不是字符串了。而我们做web开发的时候,浏览器是自动解析HTTP协议的。里面传的哪些东西我们不用管。只要记住几个参数就行。而我们要上传的文件报文是保存在请求的头文件里面的。下面就是上传文件头文件的格式:

POST/logsys/home/uploadIspeedLog!doDefault.html HTTP/1.1

Accept: text/plain, */*

Accept-Language: zh-cn

Host: 192.168.24.56

Content-Type:multipart/form-databoundary=-----------------------------7db372eb000e2

User-Agent: WinHttpClient

Content-Length: 3693

Connection: Keep-Alive

-------------------------------7db372eb000e2

Content-Disposition: form-dataname="file"filename="kn.jpg"

Content-Type: image/jpeg

(此处省略jpeg文件二进制数据...)

-------------------------------7db372eb000e2--

这就是Http上传发送的文件格式。而我们要发送的时候必然要遵循这种格式来并且不能出一点差错包括每行后面的回车,下面一段文字是网上找的感觉写的比较精彩。(尊重原创:原文地址)

红色字体部分就是协议的头。给服务器上传数据时,并非协议头每个字段都得说明,其中,content-type是必须的,它包括一个类似标志性质的名为boundary的标志,它可以是随便输入的字符串。对后面的具体内容也是必须的。它用来分辨一段内容的开始。Content-Length: 3693 ,这里的3693是要上传文件的总长度。绿色字体部分就是需要上传的数据,可以是文本,也可以是图片等。数据内容前面需要有Content-Disposition, Content-Type以及Content-Transfer-Encoding等说明字段。最后的紫色部分就是协议的结尾了。

注意这一行:

Content-Type: multipart/form-databoundary=---------------------------7db372eb000e2

根据 rfc1867, multipart/form-data是必须的.

---------------------------7db372eb000e2 是分隔符,分隔多个文件、表单项。其中b372eb000e2 是即时生成的一个数字,用以确保整个分隔符不会在文件或表单项的内容中出现。Form每个部分用分隔符分割,分隔符之前必须加上"--"着两个字符(即--{boundary})才能被http协议认为是Form的分隔符,表示结束的话用在正确的分隔符后面添加"--"表示结束。

前面的 ---------------------------7d 是 IE 特有的标志,Mozila 为---------------------------71.

每个分隔的数据的都可以用Content-Type来表示下面数据的类型,可以参考rfc1341

具体方法如下:

1、首先打开电脑上的qq,在首界面找到我的设备。

同时打开手机qq,并连上无线。

2、在打开了我的设备后,在我的设备下,点击左下角的文件传输标志。

3、寻找在浏览器中提前下载好的apk文件。

4、打开后,自动上传到手机上。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11916452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存