J2ME手机本地文件上传服务器

J2ME手机本地存储文件的上传,核心代码如下:



package com.mopietek;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import com.sun.lwuit.Display;


public class MainMIDlet extends MIDlet{


private MainPanel panel = null;

protected void destroyApp(boolean unconditional)
throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {

Display.init(this);
panel = new MainPanel(this);
}

public void exit(){

try{
destroyApp(false);
}catch(MIDletStateChangeException e){
e.printStackTrace();
}
this.notifyDestroyed();
}

}



package com.mopietek;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.io.file.FileConnection;
import javax.microedition.io.file.FileSystemRegistry;

import com.sun.lwuit.Command;
import com.sun.lwuit.Component;
import com.sun.lwuit.Container;
import com.sun.lwuit.Dialog;
import com.sun.lwuit.Form;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.TextArea;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.list.ListCellRenderer;
import com.sun.lwuit.plaf.Border;

public class MainPanel implements ActionListener{


private final String UP_DIR = "..";
private final String SEPS_STR = "/";
private final int SEPS_CHAR = '/';
private final String ROOT = "/";
private final String RES_PREFIX = "file://";

private final int BLOCK_SIZE = 256;

private final String TEXT_EXT[] = {".TXT",".H",".HPP",".C",".CPPC",".INC"};
private final String IMAGE_EXT[] = {".JPG",".JPEG",".PNG",".GIF"};
private final String WEB_EXT[] = {".HTM",".HTML",".XML",".CSS"};

private final String CHARACTER_CODE = "UTF-8";

private MainMIDlet let = null;
//主界面
private Form listForm = null;
//内容列表
private List contentList = null;
//显示文件用窗体
private Form textForm = null;

private TextArea text = null;

private Form imageForm = null;

private Command cmdExit = null;
private Command cmdView = null; //浏览目录/文件
private Command cmdDone = null; //退出浏览文件内容
private Command cmdUpload = null; //上传文件

private IconHelper helper = null;

private String currentDir = null;

public MainPanel(MainMIDlet mainMIDlet) {

let = mainMIDlet;
currentDir = ROOT;
helper = new IconHelper();
listForm = new Form();
listForm.setLayout(new BorderLayout());

cmdExit = new Command("退出");
cmdView = new Command("浏览");
cmdDone = new Command("返回");

listForm.addCommand(cmdView);
listForm.addCommand(cmdExit);
listForm.addCommandListener(this);

new BrowseThread(currentDir,true).start();


}

public void actionPerformed(ActionEvent evt) {

Command c = evt.getCommand();
if(c == cmdExit){
let.exit();
}else if(c == cmdView){
if(contentList.size() == 0){
new BrowseThread(ROOT,true).start();
}else{
final String url = ((MyContainer) contentList.getSelectedItem()).name.getText();
if(url.endsWith(SEPS_STR) == true){
new BrowseThread(currentDir + url,true).start();
}else if(url.endsWith(UP_DIR) == true){
backward();
}else{
new BrowseThread(currentDir + url,false).start();
}
}
}else if(c == cmdDone){
new BrowseThread(currentDir,true).start();
}

}

private void backward(){
int pos = currentDir.lastIndexOf(SEPS_CHAR, currentDir.length() -2);
if(pos != -1){
currentDir = currentDir.substring(0, pos +1);
}else{
currentDir = ROOT;
}
new BrowseThread(currentDir,true).start();
}

class MyContainer extends Container{

private Label name;
public MyContainer(String source){
name = new Label(source);
name.getStyle().setBgTransparency(0);
addComponent(name);
}

}


class MyRenderer implements ListCellRenderer{


private Label focus;

public MyRenderer(){

focus = new Label();
Border b = Border.createLineBorder(1, 0xff0000);
focus.getStyle().setBorder(b);
}

public Component getListCellRendererComponent(List list, Object value,
int index, boolean selected) {
return (MyContainer) value;
}

public Component getListFocusComponent(List list) {
return focus;
}

}


class BrowseThread extends Thread{

private String url = null;
private boolean isDirectory = false;

public BrowseThread(final String _url,final boolean _isDirectory){
url = _url;
isDirectory = _isDirectory;
}

public void run(){

if(isDirectory){
showDir(url);
}
else {
showFile(url);
}
}

public void showDir(final String dir){

Enumeration em = null;
FileConnection fc = null;

currentDir = dir;

listForm.removeAll();
contentList = new List();
contentList.setListCellRenderer(new MyRenderer());
listForm.addComponent(BorderLayout.CENTER,contentList);

try{
if(dir.equals(ROOT) == true){
//枚举根目录列表
em = FileSystemRegistry.listRoots();
}else{
//非根目录
fc = (FileConnection) Connector.open(RES_PREFIX + dir);
em = fc.list();
MyContainer up = new MyContainer(UP_DIR);
up.name.setIcon(helper.getIconByExt("/"));
contentList.addItem(up);
}

while(em.hasMoreElements()){

String fileName = (String) em.nextElement();
if(fileName.endsWith(SEPS_STR)){
//如果为目录
MyContainer c = new MyContainer(fileName);
c.name.setIcon(helper.getIconByExt("/"));
contentList.addItem(c);
System.out.println("filName------>"+fileName);
}else{
//非目录(文件)
MyContainer c = new MyContainer(fileName);
c.name.setIcon(helper.getIconByExt(extractExt(fileName)));
contentList.addItem(c);
}
}

listForm.revalidate();
contentList.setSelectedIndex(0,true);
if(fc != null){
fc.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
listForm.show();
}

//文件上传
public void showFile(final String fileName){

String url = "http://dev.mopietek.net:8080/waptest_1.0/httpup";
String tempFileName = fileName.toUpperCase();

byte[] data = null;

try{
FileConnection fc = (FileConnection) Connector.open(RES_PREFIX + fileName,Connector.READ);
if(!fc.exists()){
Dialog.show("Exception", "未找到文件", "ok","cancel");
}

if(isEndWithIn(tempFileName,IMAGE_EXT) == true){

InputStream is = fc.openInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
byte[] tmp = new byte[4096];
int n;

while((n = is.read(tmp)) != -1){
out.write(tmp, 0, n);
out.flush();
}

is.close();
out.close();
data = out.toByteArray();

}

if(fc != null){
fc.close();
}

}catch(Exception ex){
ex.printStackTrace();
}

try {
HttpConnection sc = (HttpConnection) Connector.open(url, Connector.READ, true);
sc.setRequestMethod(HttpConnection.POST);
sc.setRequestProperty("Content-Type", "application/octet-stream");
sc.setRequestProperty("Content-Length", String.valueOf(data.length));
OutputStream output = sc.openOutputStream();
output.write(data);
output.flush();
output.close();

} catch (IOException e) {
e.printStackTrace();
}


}

// private String getRelativeName(final String fileName){
// int pos = fileName.lastIndexOf(SEPS_CHAR);
// if(pos == -1){
// return ("");
// }
// return (fileName.substring(pos + 1, fileName.length()));
// }

private boolean isEndWithIn(final String fileName,final String[] extArray){
for(int i=0;i<extArray.length;i++){
if(fileName.endsWith(extArray[i]) == true){
return true;
}
}
return false;
}


//获取扩展名(不包括'.'符号)
private String extractExt(final String fileName){
int pos = fileName.lastIndexOf('.');
return (fileName.substring(pos + 1, fileName.length()).toLowerCase());
}


}


}




package com.mopietek;

import java.io.IOException;
import java.util.Hashtable;

import com.sun.lwuit.Image;

public class IconHelper {


//图标资源
private Image imgFolder;
private Image unknownImage;
private Image textImage;
//Audio
private Image audioImage;
//Picture
private Image picImage;
private Image jpgImage;
//Video
private Image sgpImage;
private Image aviImage;
private Image wmvImage;
private Image mpgImage;
//Web
private Image zipImage;
private Image htmlImage;
private Image xmlImage;
//Source
private Image cImage;
private Image cppImage;
private Image headerImage;
//图标管理容器
private Hashtable iconTable;

public IconHelper(){
iconTable = new Hashtable();
try{
//载入图标资源
imgFolder = Image.createImage("/filetype/folder.png");
unknownImage = Image.createImage("/filetype/unknown.png");
textImage = Image.createImage("/filetype/text.png");
//Audio
audioImage = Image.createImage("/filetype/audio.png");
//Picture
picImage = Image.createImage("/filetype/pic.png");
jpgImage = Image.createImage("/filetype/jpg.png");
//Video
sgpImage = Image.createImage("/filetype/3gp.png");
aviImage = Image.createImage("/filetype/avi.png");
wmvImage = Image.createImage("/filetype/wmv.png");
mpgImage = Image.createImage("/filetype/mpg.png");
//Web
zipImage = Image.createImage("/filetype/zip.png");
htmlImage = Image.createImage("/filetype/html.png");
xmlImage = Image.createImage("/filetype/xml.png");
//Source
cImage = Image.createImage("/filetype/c.png");
cppImage = Image.createImage("/filetype/cpp.png");
headerImage = Image.createImage("/filetype/header.png");
}catch(IOException e){
//图标资源
imgFolder = null;
unknownImage = null;
textImage = null;
//Audio
audioImage = null;
//Picture
picImage = null;
jpgImage = null;
//Video
sgpImage = null;
aviImage = null;
wmvImage = null;
mpgImage = null;
//Web
zipImage = null;
htmlImage = null;
xmlImage = null;
//Source
cImage = null;
cppImage = null;
headerImage = null;
e.printStackTrace();

}
initTable();

}


private void initTable() {
//Key为扩展名(不包括'.'符号),值为content type
iconTable.put("/", imgFolder);
iconTable.put("", unknownImage);
iconTable.put("txt", textImage);
//Source
iconTable.put("c", cImage);
iconTable.put("cpp", cppImage);
iconTable.put("h", headerImage);
//Web
iconTable.put("html", htmlImage);
iconTable.put("htm", htmlImage);
iconTable.put("xml", xmlImage);
iconTable.put("zip", zipImage);
iconTable.put("jar", zipImage);
//audio
iconTable.put("mp3", audioImage);
iconTable.put("wma", audioImage);
iconTable.put("mid", audioImage);
iconTable.put("wav", audioImage);
//Picture
iconTable.put("gif", picImage);
iconTable.put("png", picImage);
iconTable.put("jpg", jpgImage);
iconTable.put("jepg", jpgImage);
//Video
iconTable.put("3gp", sgpImage);
iconTable.put("avi", aviImage);
iconTable.put("wmv", wmvImage);
iconTable.put("mpeg", mpgImage);
iconTable.put("mpg", mpgImage);
iconTable.put("mp4", mpgImage);

}

//按照扩展名(不包括'.'符号) 获取文件的图标对象
public Image getIconByExt(final String extension) {

Image temp = (Image) iconTable.get(extension);
//是否为空,则使用默认图标替代
return ((temp == null) ? unknownImage : temp);

}

}



由于是在昨天的lwuit版手机本地文件读取上修改,所以代码中用到的资源文件在上一篇中可以下载,程序中只是写实现了图片的上传的代码,其它类型文件跟图片文件上传相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值