使用jfinal开发程序时,需要上传图片到服务器,查阅官方帮助文档发现,jfinal已经分装好了文件上传的工具,写此文章做个总结。
一、环境
- web服务器:Jboss
- 系统:Mac OS 10.12
- 框架:jfinal 3.1
二、实现
- 前端HTML
<form id="form1" action="uploadFile" method="post" enctype="multipart/form-data" >
<input type="file" id="file" name="file"></input>
<input type="submit" onclick="" id="btn" value="上传">
</form>
说明:如果客户端请求为multipart request,即使用enctype=”multipart/form-data” 属性,则controller中使用getPara方法时,必须先要调用getFile方法,因为multipart request需要通过getFile系列方法解析请求体重的数据,包括参数。
- 配置文件
public void configConstant(Constants me) {
// 加载少量必要配置,随后可用PropKit.get(...)获取值
PropKit.use("a_little_config.txt");
me.setEncoding("utf-8");
me.setDevMode(PropKit.getBoolean("devMode", false));
//String fileUploadPath = "/usr/local/uploadPicture";
String fileUploadPath = "d:/fileUpload";
me.setBaseUploadPath(fileUploadPath);
}
如果有报错:修改action=”./uploadFile”
三、如果需要重新命名文件
/**
* addAdv 添加广告 上传图片
*/
public void addAdv(){
UploadFile upfile = getFile();//JFinal规定getFile()必须最先执行
File file = upfile.getFile();
String filename = file.getName();
String delfilename = filename;
if(filename!=null && !filename.equals("")){
filename = new SimpleDateFormat("yyyyMMddkkmmss").format(new Date())+filename;
System.out.println(filename);
/**
* 新保存的位置
*/
String path = getRequest().getSession().getServletContext()
.getRealPath("/");
String newPath = "/media/file/";//自定义目录 用于存放图片
/**
* 没有则新建目录
*/
File floder = new File(path + newPath);
if (!floder.exists()) {
floder.mkdirs();
}
/**
* 保存新文件
*/
FileInputStream fis = null;
FileOutputStream fos = null;
try{
File savePath = new File(path + newPath + filename);
if(!savePath.isDirectory()) savePath.createNewFile();
fis = new FileInputStream(file);
fos = new FileOutputStream(savePath);
byte[] bt = new byte[300];
while (fis.read(bt, 0, 300) != -1) {
fos.write(bt, 0, 300);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(null!=fis) fis.close();
if(null!=fos) fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 删除原图片,JFinal默认上传文件路径为 /upload(自动创建)
*/
File delFile = new File(path+"/upload/"+delfilename);
if(delFile.exists()){
delFile.delete();
}
setAttr("msg",filename);
setAttr("t",1);
}else{
setAttr("t",0);
}
Advertising advertising = getModel(Advertising.class,"advertising");
advertising.set("img","http://localhost:8080/media/file/"+filename);
advertising.save();
renderText("OK");
}