Hi I want to upload my video file into web server in Android. I followed this tutorial:
Uploading files to HTTP server using POST on Android.
But. I got thi
its just because of large size of video. Use chunk upload approach for large file/video.
Here is sample code to post chunk data on server.
public void upload(String filename, byte[] image) {
// 1MB of chunk
byte[][] divideByte = divideArray(image, ((1024 * 1024)/2));
int length = divideByte.length;
String token = "" + (int)System.currentTimeMillis();
Log.i("System out", "divideByte:" + length);
Log.i("System out", "token:" + token);
for (int i = 0; i < length; i++) {
List nameValuePairs = new ArrayList();
String link = "";
nameValuePairs.add(new BasicNameValuePair("filename", filename));// filename
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(link);
Log.i("System out", "divideByte[" + i + "] length :"
+ divideByte[i].length);
String img = Base64.encodeBytes(divideByte[i]);
nameValuePairs.add(new BasicNameValuePair("file64", img));
nameValuePairs.add(new BasicNameValuePair("token", new String(""
+ token)));
nameValuePairs.add(new BasicNameValuePair("chunksize", new String(""+
divideByte[i].length)));
nameValuePairs.add(new BasicNameValuePair("chunkcount", new String(
"" + length)));
nameValuePairs.add(new BasicNameValuePair("index", new String(""
+ i)));
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
String res = EntityUtils.toString(httpEntity).toString();
Log.i("System out", "response is :" + res);
}
httpEntity = null;
response = null;
} catch (Exception e) {
e.printStackTrace();
}finally{
httppost = null;
httpclient = null;
}
}
}
public static byte[][] divideArray(byte[] source, int chucksize) {
byte[][] ret = new byte[(int) Math.ceil(source.length
/ (double) chucksize)][chucksize];
Log.i("System out","ret: "+ret.length);
int start = 0;
for (int i = 0; i < ret.length; i++) {
if (start + chucksize > source.length) {
System.arraycopy(source, start, ret[i], 0, source.length
- start);
} else {
System.arraycopy(source, start, ret[i], 0, chucksize);
}
start += chucksize;
}
return ret;
}
and on server side get the all chunks index wise and compose one video file.
Hope help to you.