1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > android培训之android下大文件分割上传(摘自达内总部)

android培训之android下大文件分割上传(摘自达内总部)

时间:2023-01-07 21:00:04

相关推荐

android培训之android下大文件分割上传(摘自达内总部)

由于android自身的原因,对大文件(如影视频文件)的*作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题。

文件分割后分多次请求服务。

1 //文件分割上传

2 public void cutFileUpload(String fileType,String filePath)

3 {

4 try

5 {

6 FileAccessI fileAccessI = new FileAccessI(filePath, 0);

7 Long nStartPos = 0l;

8 Long length = fileAccessI.getFileLength();

9 int mBufferSize = 1024 * 100; //每次处理1024 * 100字节

10 byte[] buffer = new byte[mBufferSize];

11 FileAccessI.Detail detail;

12 long nRead = 0l;

13 String vedioFileName = Usual.f_getUUID(); //分配一个文件名

14 long nStart = nStartPos;

15 int i = 0;

16 while (nStart < length)

17 {

18 detail = fileAccessI.getContent(nStart);

19 nRead = detail.length;

20 buffer = detail.b;

21 JSONObject mInDataJson = new JSONObject();

22 mInDataJson.put("a", "282");

23 mInDataJson.put("FileName", vedioFileName);

24 mInDataJson.put("start", nStart); //服务端获取开始文章进行写文件

25 mInDataJson.put("filetype", fileType);

26 nStart += nRead;

27 nStartPos = nStart;

28 String url = UsualA.f_getXmlSOAUrl(UsualA.mServiceFastByteUrl, "n.uploadvedio", mInDataJson.toString(),

29 "282");

30 HttpFastUtil.f_httpPostByte(url, buffer, false);

31 }

32 }

33 catch (Exception e)

34 {

35 }

文件分割类

1 package i****ong.mppsp.android.util;

2

3 import java.io.*;

4

5 public class FileAccessI implements Serializable

6 {

7

8 RandomAccessFile oSavedFile;

9 long nPos;

10

11

12 public FileAccessI() throws IOException

13 {

14 this("", 0);

15 }

16 public FileAccessI(String sName, long nPos) throws IOException

17 {

18 oSavedFile = new RandomAccessFile(sName, "rw");//创建一个随机访问文件类,可读写模式

19 this.nPos = nPos;

20 oSavedFile.seek(nPos);

21 }

22 public synchronized int write(byte[] b, int nStart, int nLen)

23 {

24 int n = -1;

25 try

26 {

27 oSavedFile.write(b, nStart, nLen);

28 n = nLen;

29 }

30 catch (IOException e)

31 {

32 e.printStackTrace();

33 }

34 return n;

35 }

36 //每次读取102400字节

37 public synchronized Detail getContent(long nStart)

38 {

39 Detail detail = new Detail();

40 detail.b = new byte[102400];

41 try

42 {

43 oSavedFile.seek(nStart);

44 detail.length = oSavedFile.read(detail.b);

45 }

46 catch (IOException e)

47 {

48 e.printStackTrace();

49 }

50 return detail;

51 }

52

53

54 public class Detail

55 {

56

57 public byte[] b;

58 public int length;

59 }

60

61 //获取文件长度

62 public long getFileLength()

63 {

64 Long length = 0l;

65 try

66 {

67 length = oSavedFile.length();

68 }

69 catch (IOException e)

70 {

71 // TODO Auto-generated catch block

72 e.printStackTrace();

73 }

74 return length;

75 }

76 }

服务端获得分割的文件,利用RandomAccessFile进行文件整理

1 /**

2 * 音视频图片处理

3 * @param mStr

4 * @return

5 * @throws Exception

6 */

7 public static String f_uploadVedio(String mStr) throws Exception

8 {

9 String mResult = Usual.mEmpty;

10 String fileType = Usual.mEmpty;

11 int startPosL = 0;

12 RandomAccessFile oSavedFile = null;

13 JSONObject jsonObject = new JSONObject(mStr);

14 String vedioJsonStr = jsonObject.getString("VEDIO");

15 byte[] vedioBytes = Usual.f_fromBase64String(vedioJsonStr);

16 startPosL = (Integer) jsonObject.get("start"); //接收客户端的开始位置(文件读取到的字节大小)

17 fileType = (String)jsonObject.getString("filetype");

18 String fileName = (String)jsonObject.getString("FileName");

19 if(fileType.equals("picture"))

20 {

21 oSavedFile = new RandomAccessFile("E:\\"+fileName+".jpg","rw");

22 }

23 else if(fileType.equals("photo"))

24 {

25 oSavedFile = new RandomAccessFile("E:\\"+fileName+".jpg","rw");

26 }

27 else if(fileType.equals("voice"))

28 {

29 oSavedFile = new RandomAccessFile("E:\\"+fileName+".mp3","rw");

30 }

31 else if(fileType.equals("video"))

32 {

33 oSavedFile = new RandomAccessFile("E:\\"+fileName+".mp4", "rw");

34 }

35 //设置标志位,标志文件存储的位置

36 oSavedFile.seek(startPosL);

37 oSavedFile.write(vedioBytes);

38 oSavedFile.close();

39 mResult = "000";

40 return mResult;

41 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。