I am having some problem while uploading large video file(upto 150MB)
1.When I use this code Link1 .I able to upload small file with progress bar ,but as my file is large so android give me OutOfMemory Error.
2.If I use this code Link2. i am able to upload large file(this is really a good solution) but don't know how to show progess(like 20% complete or 80% complete and so on).so Please guide me.
Add upload completion percentage to the progress bar real-time using Ajax. Upload file to server using PHP. Before getting started to integrate file upload with progress bar, take a look at the file structure. The index.html file handles the file selection and live upload progress display operations. 1.
If you didn’t understand then you can download the source code files of this File Upload JavaScript with Progress Bar from the given download button. First, create an HTML file with the name of index.html and paste the given codes into your HTML file. Remember, you’ve to create a file with .html extension.
fileUploader.uploadFiles () function takes 5 arguments. 1. API endpoint 2. API file key 3. An array of the File object (Files to be upload) 4.
The upload progress percentage is attached to the progress bar. The FormData object is used to retrieve the submitted file data. Based on the response, the upload status is displayed on the webpage. On change event, the file type is validated based on the allowed types.
Finally I got solution of my question I want to share it ...
1.First solution Link1 This solution is ok with small files like image upload upto 15MB .But I could not get rid from OutOfMemory error if file is very large.
2.Second solution(Link2) is really a good solution and for showing progress bar I used a custom MultipartEntity class. Code is here:
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
public class CustomMultiPartEntity extends MultipartEntity
{
private final ProgressListener listener;
public CustomMultiPartEntity(final ProgressListener listener)
{
super();
this.listener = listener;
}
public CustomMultiPartEntity(final HttpMultipartMode mode, final ProgressListener listener)
{
super(mode);
this.listener = listener;
}
public CustomMultiPartEntity(HttpMultipartMode mode, final String boundary, final Charset charset, final ProgressListener listener)
{
super(mode, boundary, charset);
this.listener = listener;
}
@Override
public void writeTo(final OutputStream outstream) throws IOException
{
super.writeTo(new CountingOutputStream(outstream, this.listener));
}
public static interface ProgressListener
{
void transferred(long num);
}
public static class CountingOutputStream extends FilterOutputStream
{
private final ProgressListener listener;
private long transferred;
public CountingOutputStream(final OutputStream out, final ProgressListener listener)
{
super(out);
this.listener = listener;
this.transferred = 0;
}
public void write(byte[] b, int off, int len) throws IOException
{
out.write(b, off, len);
this.transferred += len;
this.listener.transferred(this.transferred);
}
public void write(int b) throws IOException
{
out.write(b);
this.transferred++;
this.listener.transferred(this.transferred);
}
}
}
And my activity code is
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import com.example.fileupload.CustomMultiPartEntity.ProgressListener;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
private ProgressBar pb;
private final String filename = "/mnt/sdcard/vid.mp4";
// private final String filename = "/mnt/sdcard/a.3gp";
private String urlString = "http://10.0.2.2:8080/FileUploadServlet1/UploadServlet";
private TextView tv;
long totalSize = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView1);
findViewById(R.id.button1).setOnClickListener(this);
tv.setText("init");
pb = (ProgressBar) findViewById(R.id.progressBar1);
}
private class Uploadtask extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
pb.setProgress(0);
tv.setText("shuru");
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
pb.setProgress(progress[0]);
}
@Override
protected String doInBackground(Void... params) {
return upload();
}
private String upload() {
String responseString = "no";
File sourceFile = new File(filename);
if (!sourceFile.isFile()) {
return "not a file";
}
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(urlString);
try {
CustomMultiPartEntity entity=new CustomMultiPartEntity(new ProgressListener() {
@Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
entity.addPart("type", new StringBody("video"));
entity.addPart("uploadedfile", new FileBody(sourceFile));
totalSize = entity.getContentLength();
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
responseString = EntityUtils.toString(r_entity);
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
tv.setText(result);
super.onPostExecute(result);
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Uploadtask().execute();
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With