I use post with file to upload a image file to website. i got the error message.Could you give me some suggestion? Thanks
system:android 4.0.3
phone:htc x
error information
E/dalvikvm(11952): Could not find class 'org.apache.http.entity.mime.content.FileBody', referenced from method tw.tcc.tsvs.www.FileUploadPost.FileUploadPostActivity$1.onClick
code
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
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.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
private Button.OnClickListener jclove=new OnClickListener(){
public void onClick(View v) {
try {
//file_post
File file = new File("/sdcard/android.jpg");
try {
HttpClient client = new DefaultHttpClient();
String postURL = "http://latest.tsd2497r1.ext.hipaas.hinet.net/";
HttpPost post = new HttpPost(postURL);
FileBody bin = new FileBody(file);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("myFile", bin);
post.setEntity(reqEntity);
HttpResponse response = client.execute(post);
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
Log.i("RESPONSE",EntityUtils.toString(resEntity));
}
} catch (Exception e) {
e.printStackTrace();
}
//}
} catch (Exception e) {
e.printStackTrace();
}
}
};
From your code and error I think you forgot to add httpmime-4.0.jar file in your build path.
Example Code:
HttpPost httpost = new HttpPost("url for upload file");
MultipartEntity entity = new MultipartEntity();
entity.addPart("myIdentifier", new StringBody("somevalue"));
entity.addPart("myAudioFile", new FileBody(File));
httpost.setEntity(entity);
HttpResponse response;
response = httpclient.execute(httpost);
Look at My answer in this SO question.
upload an image and audio in One request in android
For uploading you should check with MIME Headers and buffer for file upload.
You can try with code similar to given below :-
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
String fName = uploadPath.substring(uploadPath
.lastIndexOf("/") + 1);
dos.writeBytes(LINE_START + BOUNDRY + LINE_END);
dos.writeBytes("Content-Disposition: form-data; name=\"uploaded\";"
+ " filename=\"" + fName + "\"" + LINE_END);
dos.writeBytes("Content-Type: image/JPEG" + LINE_END);
dos.writeBytes(LINE_END);
// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
totalBytes = 0;
while (bytesRead > 0) {
totalBytes += bytesRead;
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
// send multipart form data necesssary after file data...
dos.writeBytes(LINE_END);
dos.writeBytes(LINE_START + BOUNDRY + LINE_START + LINE_END);
// close streams
fileInputStream.close();
dos.flush();
dos.close();
Thanks everyone. I learn more.
The below link was most useful for me.
https://groups.google.com/forum/?fromgroups#!topic/android-developers/QQSWZ_sWdgU/discussion
Beside using httpmime.jar,2nd way is copying sources(*.java) into yourproject/src folder... The final directiry structure should be like yourproject/src/org/apache/http/entity/mime/...
You should not mix jar libraries and sources files these libraries...
Everythihng works fine for me, so just do it carefully.
source code(*.java) you can download from http://hc.apache.org/downloads.cgi
select HttpClient 4.2.1: SOURCE-->4.2.1.zip.
File file = new File("/sdcard/android.jpg");
try {
HttpClient client = new DefaultHttpClient();
String postURL = "http://192.168.12.90/album/upload.php"; //web site
HttpPost post = new HttpPost(postURL);
FileBody bin = new FileBody(file);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("upf", bin); // first reference name(upf) should be the same as server side
post.setEntity(reqEntity);
HttpResponse response = client.execute(post);
HttpEntity resEntity = response.getEntity();
} catch (Exception e) {
e.printStackTrace();
}
}
//server side php code
$Destdir="upload";
$tmp_filename=$_FILES['upf']['tmp_name'];//post reference(upf).It must be the same as addPart("upf"
$originalfilename=$_FILES['upf']['name'];//post reference(upf).It must be the same as addPart("upf"
$server_filename= $Destdir. "/" .basename($originalfilename);
move_uploaded_file($tmp_filename,$server_filename);