当前位置:首页 » 文件管理 » android文件分割上传

android文件分割上传

发布时间: 2022-02-23 13:30:12

Ⅰ android端 file文件上传

我们做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-data;boundary=-----------------------------7db372eb000e2
User-Agent: WinHttpClient
Content-Length: 3693
Connection: Keep-Alive
-------------------------------7db372eb000e2
Content-Disposition: form-data; name="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-data; boundary=---------------------------7db372eb000e2

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

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

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

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

Ⅱ 急!求安卓版的文件动力,或者能分割文件的软件(手机端的)

这个还真没办法....你要是流量多的话把他上传到网盘 然后内存卡换回来再下载 这个要很多流量哦 不要乱试 不然只能乖乖的去找电脑 还是跟别人借下手机把内存卡装他手机用蓝牙传给他然后再装回你的手机就行了。 对了也可以下载个解压缩软件 把文件压缩了应该会减小文件的体积 然后传到手机 换张内存卡再解压出来 我没试过哦不可以不要怪我...

Ⅲ ISO文件怎么进行分割上传

可以用winrar进行分卷压缩,这样就会分成若干个指定大小的文件,然后上传即可。

Ⅳ 安卓开发上传txt到file读取出来多了一个长度

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

dst
登录

yeqiufeng
关注
Android开发-asset中文件超过1M的解决方法 转载
2012-07-03 18:52:21

yeqiufeng

码龄20年

关注
res/raw和assets的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

读取文件资源:

1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

InputStream is = getResources().openRawResource(R.id.filename);
2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作

AssetManager am = null ;
am = getAssets();
InputStream is = am.open("filename" );
在未知目录下有哪些文件,该去和获取这些文件的名称并把文件拷贝到目标目录中呢?

String[] files = getAssets().list("");
来获取assets目录下所有文件夹和文件的名称,再通过这些名称再读取我们想要的文件。

Android 对asset与raw的限制

在读取这两个资源文件夹中的文件时会有一定的限制,即单个文件大小不能超过1M ,如果读取超过1M的文件会报 “Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)“ 的IOException。

如何解决呢:

首先想到的是分割文件,再去合并并文件。

假设我们现在要把一个超过1M的文件在程序启动时拷贝到sdcard中

1.先把需要拷贝的大文件分割成若干个大小小于1M的小文件(事先写个程序来分隔或者使用一些工具,我这里直接写了个程序),把这些 小文件放在assets文件夹中。

2.在程序启动时我们获取这些小文件的文件名,当然我们得事先规定小文件的命名方式方便我们来获取这些文件名。
3.通过获得的小文件名分别建立输入流来合并成一个大文件,并拷贝到sdcard中。

Ⅳ android listView读取txt文档后怎么分割文件并列表显示每页5条,新手请多多指教!

你不是每行一条吗,计算几个换行符就是了

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

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

?

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..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开始),后者代表总分片数。

Ⅶ android怎么同时上传文件和数据

Part[] parts;
文字
parts[i++] = new StringPart(key, value, HTTP.UTF_8);
附件
// parts[i++] = new FilePart(file.getKey(), file.getValue());
// parts[i++] = new FilePart(file.getKey(),
// file.getValue().getName(),
// file.getValue(), null, HTTP.UTF_8);
parts[i++] = new FilePart(file.getKey(), file.getValue().getName(),file.getValue());
上传
httpPost.setEntity(new MultipartEntity(parts, httpPost.getParams()));
去下载开源的StringPart FilePart MultipartEntity

Ⅷ android实现文件上传的功能

我是这样做的
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "请选择一个要上传的文件"), 1);
然后选择文件后调用
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String url= uri.toString();


获得路径,根据路径调用
public String convertCodeAndGetText(String str_filepath) {// 转码\
try {
File file1 = new File(str_filepath);
file_name = file1.getName();
FileInputStream in = new FileInputStream(file1);
byte[] buffer = new byte[(int) file1.length() + 100];
int length = in.read(buffer);
load = Base64.encodeToString(buffer, 0, length,
Base64.DEFAULT);
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return load;
}
对文件进行编码

Ⅸ 上传视频文件太大 怎么分割 压缩

分割和压缩只需要对视频文件执行一项,达到将视频缩小的目的就可以,我们通常是用视频文件压缩缩小视频文件,那么这里就讲解压缩视频文件的操作过程;
1、参考工具(迅捷视频压缩软件)

2、打开工具点击视频压缩。
3、点击页面中的选项“选择文件”。
4、点击文件页面下的输出选择。
5、小编将视频输出mp4自定义设置。
6、点击页面右方开始压缩按键。

Ⅹ 如何html5分割上传实现超大文件无插件网页上传

//代码不支持IE因为IE对HTML5支持不好
$("#file").change(function(event){
varfile=$("#file")[0].files[0];
PostFile(file,0);

});
functionPostFile(file,i){
varname=file.name,//文件名
size=file.size,//总大小shardSize=2*1024*1024,
shardSize=2*1024*1024,//以2MB为一个分片
shardCount=Math.ceil(size/shardSize);//总片数
if(i>=shardCount){
return;
}
//计算每一片的起始与结束位置
varstart=i*shardSize,
end=Math.min(size,start+shardSize);
//构造一个表单,FormData是HTML5新增的
varform=newFormData();
form.append("data",file.slice(start,end));//slice方法用于切出文件的一部分
form.append("lastModified",file.lastModified);//slice方法用于切出文件的一部分
form.append("name",name);
form.append("total",shardCount);//总片数
form.append("index",i+1);//当前是第几片
//Ajax提交
$.ajax({
url:"/test/AjaxFile",
type:"POST",
data:form,
async:true,//异步
processData:false,//很重要,告诉jquery不要对form进行处理
contentType:false,//很重要,指定为false才能形成正确的Content-Type
success:function(data){
if(data){
i=data++;
varnum=Math.ceil(i*100/shardCount);
$("#output").text(num+'%');
PostFile(file,i);
}
}
});
}

热点内容
Android添加插件 发布:2024-10-27 06:14:33 浏览:154
x在c语言中是什么意思 发布:2024-10-27 06:12:19 浏览:783
安卓手机怎么关闭数据 发布:2024-10-27 06:08:59 浏览:514
安卓怎么打出07 发布:2024-10-27 06:01:34 浏览:151
linux查看系统位数 发布:2024-10-27 05:59:19 浏览:604
魔兽该文件夹未包含正确的游戏版本 发布:2024-10-27 05:57:15 浏览:674
安卓手机如何唱k 发布:2024-10-27 05:55:40 浏览:883
新手适合什么样的安卓手机 发布:2024-10-27 05:46:46 浏览:218
儿童身高算法 发布:2024-10-27 05:42:27 浏览:765
怎么进qq加密空间 发布:2024-10-27 05:40:01 浏览:537