android下大文件分割上传
由于android自身的原因,对大文件(如影视频文件)的操作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题。
- 文件分割后分多次请求服务。
//文件分割上传
public void cutFileUpload(String fileType,String filePath)
{
try
{
FileAccessI fileAccessI = new FileAccessI(filePath, 0);
Long nStartPos = 0l;
Long length = fileAccessI.getFileLength();
int mBufferSize = 1024 * 100; //每次处理1024 * 100字节
byte[] buffer = new byte[mBufferSize];
FileAccessI.Detail detail;
long nRead = 0l;
String vedioFileName = Usual.f_getUUID(); //分配一个文件名
long nStart = nStartPos;
int i = 0;
while (nStart < length)
{
detail = fileAccessI.getContent(nStart);
nRead = detail.length;
buffer = detail.b;
JSONObject mInDataJson = new JSONObject();
mInDataJson.put("a", "282");
mInDataJson.put("FileName", vedioFileName);
mInDataJson.put("start", nStart); //服务端获取开始文章进行写文件
mInDataJson.put("filetype", fileType);
nStart += nRead;
nStartPos = nStart;
String url = UsualA.f_getXmlSOAUrl(UsualA.mServiceFastByteUrl, "n.uploadvedio", mInDataJson.toString(),
"282");
HttpFastUtil.f_httpPostByte(url, buffer, false);
}
}
catch (Exception e)
{
} - 文件分割类
package ishitong.mppsp.android.util; import java.io.*; public class FileAccessI implements Serializable
{ RandomAccessFile oSavedFile;
long nPos; public FileAccessI() throws IOException
{
this("", 0);
}
public FileAccessI(String sName, long nPos) throws IOException
{
oSavedFile = new RandomAccessFile(sName, "rw");//创建一个随机访问文件类,可读写模式
this.nPos = nPos;
oSavedFile.seek(nPos);
}
public synchronized int write(byte[] b, int nStart, int nLen)
{
int n = -1;
try
{
oSavedFile.write(b, nStart, nLen);
n = nLen;
}
catch (IOException e)
{
e.printStackTrace();
}
return n;
}
//每次读取102400字节
public synchronized Detail getContent(long nStart)
{
Detail detail = new Detail();
detail.b = new byte[102400];
try
{
oSavedFile.seek(nStart);
detail.length = oSavedFile.read(detail.b);
}
catch (IOException e)
{
e.printStackTrace();
}
return detail;
} public class Detail
{ public byte[] b;
public int length;
} //获取文件长度
public long getFileLength()
{
Long length = 0l;
try
{
length = oSavedFile.length();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return length;
}
} - 服务端获得分割的文件,利用RandomAccessFile进行文件整理
/**
* 音视频图片处理
* @param mStr
* @return
* @throws Exception
*/
public static String f_uploadVedio(String mStr) throws Exception
{
String mResult = Usual.mEmpty;
String fileType = Usual.mEmpty;
int startPosL = 0;
RandomAccessFile oSavedFile = null;
JSONObject jsonObject = new JSONObject(mStr);
String vedioJsonStr = jsonObject.getString("VEDIO");
byte[] vedioBytes = Usual.f_fromBase64String(vedioJsonStr);
startPosL = (Integer) jsonObject.get("start"); //接收客户端的开始位置(文件读取到的字节大小)
fileType = (String)jsonObject.getString("filetype");
String fileName = (String)jsonObject.getString("FileName");
if(fileType.equals("picture"))
{
oSavedFile = new RandomAccessFile("E:\\"+fileName+".jpg","rw");
}
else if(fileType.equals("photo"))
{
oSavedFile = new RandomAccessFile("E:\\"+fileName+".jpg","rw");
}
else if(fileType.equals("voice"))
{
oSavedFile = new RandomAccessFile("E:\\"+fileName+".mp3","rw");
}
else if(fileType.equals("video"))
{
oSavedFile = new RandomAccessFile("E:\\"+fileName+".mp4", "rw");
}
//设置标志位,标志文件存储的位置
oSavedFile.seek(startPosL);
oSavedFile.write(vedioBytes);
oSavedFile.close();
mResult = "000";
return mResult;
}
android下大文件分割上传的更多相关文章
- PHP + JS 实现大文件分割上传
服务器上传文件会有一定的限制.避免内存消耗过大影响性能,在 php.ini 配置文件中,有几个影响参数: upload_max_filesize = 2M //PHP最大能接受的文件大小 post_m ...
- Html5 突破微信限制实现大文件分割上传
先来前端代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content=&q ...
- formdata方式上传文件,支持大文件分割上传
1.upload.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <h ...
- PHP大文件分割上传(分片上传)
服务端为什么不能直接传大文件?跟php.ini里面的几个配置有关 upload_max_filesize = 2M //PHP最大能接受的文件大小 post_max_size = 8M //PHP能收 ...
- PHP实现大文件分割上传与分片上传
转载:http://www.zixuephp.com/phpstudy/phpshilie/20170829_43029.html 服务端为什么不能直接传大文件?跟php.ini里面的几个配置有关 u ...
- js大文件分割上传
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- PHP大文件分片上传的实现方法
一.前言 在网站开发中,经常会有上传文件的需求,有的文件size太大直接上传,经常会导致上传过程中耗时太久,大量占用带宽资源,因此有了分片上传. 分片上传主要是前端将一个较大的文件分成等分的几片,标识 ...
- 使用webuploader组件实现大文件分片上传,断点续传
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
- 利用blob对象实现大文件分片上传
首先说分片上传,我们在进行文件上传的时候,因为服务器的限制,会限制每一次上传到服务器的文件大小不会很大,这个时候我们就需要把一个需要上传的文件进行切割,然后分别进行上传到服务器. 假如需要做到这一步, ...
随机推荐
- swfupload上传文件问题
如果你的框架用到了struts2的话 可能会造成request冲突 那么解决的办法就是把该request排除出去 不让struts2拦截
- WF学习笔记(一)
-流程启动方式1: WorkflowInvoker.Invoke(new Workflow1()); -流程启动方式2: WorkflowApplication instance = new Work ...
- 那些年被我坑过的Python——一夫当关 第十三章(堡垒机初步设计)
堡垒机架构 堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必 ...
- Adobe Acrobat XI Pro 两种破解方式 Keygen秘钥 license替换 亲测有效
大家平时看paper比较多的话想必都是用Adobe Acrobat而非Adobe Reader吧,其功能全面之处就不啰嗦了,下面给大家分享下Adobe Acrobat XI Pro的两种破解方式(两种 ...
- 转:PHP非阻塞模式
你可以任意转摘“PHP非阻塞模式”,但请保留本文出处和版权信息.作者:尘缘,QQ:130775,来源:http://www.4wei.cn/archives/1002336 让PHP不再阻塞当PHP作 ...
- 转:PHP性能优化大全
原文来自于:http://www.open-open.com/lib/view/open1370769825070.html PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调 ...
- CMD模块定义规范
CMD 模块定义规范 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规 ...
- [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】
题目链接: BZOJ - 1033 题目分析 模拟!纯粹按照题目描述模拟! 这是一道喜闻乐见的经典模拟题! 我一共写了2遍,Debug 历时2天的所有晚自习 ... 时间超过 8h ... 我真是太弱 ...
- Delphi XE6 for Android 让手机震动(调用Java的函数)
震动,是调用了 安卓api JNI 里面的 函数 ,这些都是 调用java的 ,如下面的引用, uses FMX.Helpers.Android, Androidapi.JNI.App, A ...
- java学习之负数的进制
在上一篇内容当中说明了什么是进制,进制存在的原因以及形式,接下来说一下一个比较特殊的进制计算,就是负数的在计算机当中的表示.举个个例子来说 6的二进制表示是什么? 0000-0000-0000-000 ...