The file upload code can be downloaded from Sony Ericsson website.
Here's the J2ME client side code -
Code:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.file.*;
import javax.microedition.io.*;
import java.io.*;
public class UPLOAD_FileConnection extends MIDlet implements Runnable, CommandListener{
private final String FILE = "/image.jpg";
private final String URL = "http://localhost/debayan/post.php"; // change this to a valid page.
private final String CrLf = "\r\n";
private Form form = null;
private Gauge gauge = null;
private Command exitCommand;
private Command uploadCommand;
public UPLOAD_FileConnection(){
form = new Form("Upload File");
gauge = new Gauge("Progress:", true, 100, 0);
form.append(gauge);
exitCommand = new Command("Exit", Command.EXIT, 0);
uploadCommand = new Command("Upload", Command.SCREEN, 0);
form.addCommand(exitCommand);
form.addCommand(uploadCommand);
form.setCommandListener(this);
}
public void startApp() {
Display.getDisplay(this).setCurrent(form);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
private void progress(int total, int current){
int percent = (int) (100 * ((float)current/(float)total));
gauge.setValue(percent);
}
public void run() {
httpConn();
}
private void httpConn(){
HttpConnection conn = null;
OutputStream os = null;
InputStream is = null;
try{
conn = (HttpConnection)Connector.open(URL);
conn.setRequestMethod(HttpConnection.POST);
//InputStream imgIs = getClass().getResourceAsStream("/image.jpg");
FileConnection fconn = (FileConnection)Connector.open("file:///E:/image.jpg", Connector.READ_WRITE);
InputStream imgIs = fconn.openInputStream();
//InputStream imgIs = fconn;
byte []imgData = new byte[imgIs.available()];
imgIs.read(imgData);
String message1 = "";
message1 += "-----------------------------4664151417711" + CrLf;
message1 += "Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"" + FILE + "\"" + CrLf;
message1 += "Content-Type: image/jpg" + CrLf;
message1 += CrLf;
// the image is sent between the messages ni the multipart message.
String message2 = "";
message2 += CrLf + "-----------------------------4664151417711--" + CrLf;
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=---------------------------4664151417711");
// might not need to specify the content-length when sending chunked data.
// conn.setRequestProperty("Content-Length", String.valueOf((message1.length() + message2.length() + imgData.length)));
System.out.println("open os");
os = conn.openOutputStream();
System.out.println(message1);
os.write(message1.getBytes());
// SEND THE IMAGE
int index = 0;
int size = 1024;
do{
System.out.println("write:" + index);
if((index+size)>imgData.length){
size = imgData.length - index;
}
os.write(imgData, index, size);
index+=size;
progress(imgData.length, index); // update the progress bar.
}while(index<imgData.length);
System.out.println("written:" + index);
System.out.println(message2);
os.write(message2.getBytes());
os.flush();
System.out.println("open is");
is = conn.openInputStream();
char buff = 512;
int len;
byte []data = new byte[buff];
do{
System.out.println("READ");
len = is.read(data);
if(len > 0){
System.out.println(new String(data, 0, len));
}
}while(len>0);
System.out.println("DONE");
}catch(Exception e){
System.out.println("ERROR" + e);
}finally{
System.out.println("Close connection");
try{
os.close();
}catch(Exception e){}
try{
is.close();
}catch(Exception e){}
try{
conn.close();
}catch(Exception e){}
}
}
public void commandAction(javax.microedition.lcdui.Command command, javax.microedition.lcdui.Displayable displayable) {
if(command == exitCommand){
this.notifyDestroyed();
}else if(command == uploadCommand){
new Thread(this).start();
}
}
}
And here's the PHP server side part -
Code:
<?php
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
?>
Find this line of code and change the highlighted text according to your need.
Code:
FileConnection fconn = (FileConnection)Connector.open("file:///E:/image.jpg", Connector.READ_WRITE);
I made some changes to the original code. See if it works for you or download the original.
Also you may try the following link -
HTML Code:
http://wiki.forum.nokia.com/index.php/HTTP_Post_multipart_file_upload_in_Java_ME