使用jfinal开发程序时,需要上传图片到服务器,查阅官方帮助文档发现,jfinal已经分装好了文件上传的工具,写此文章做个总结。

一、环境

  1. web服务器:Jboss
  2. 系统:Mac OS 10.12
  3. 框架: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");
}