jfinal文件form表单上传,ajaxfileupload异步上传

JFinal文件上传

官网文档描述如下:

getFile 文件上传

Controller提供了getFile 系列方法支持文件上传。特别注意:如果客户端请求为 multipart request(form 表单使用了enctype=”multipart/form-data”),那么必须先调用 getFile 系列方法才能使 getPara 系列方法正常工作,因为 multipart request 需要通过 getFile 系列方法解析请求体中的数据,包括参数。文件默认上传至项目根路径下的upload子路径之下,该路径称为文件上传基础路径。可以在JFinalConfig.configConstant(Constants me)方法中通过 me.setBaseUploadPath(baseUploadPath)设置文件上传基础路径,该路径参数接受以”/”打头或者以 windows 磁盘盘符打头的绝对路径,即可将基础路径指向项目根径之外,方便单机多实例部署。当该路径参数设置为相对路径时,则是以项目根为基础的相对路径。

一、form表单上传

参考链接:

http://www.jfinal.com/upload/2.2/jfinal-2.2-manual.pdf

https://my.oschina.net/bloghu/blog/275289

http://www.oschina.net/question/203659_151849

1. 导入 cos-26Dec2008.jar包

下载地址:http://download.csdn.net/detail/long_1234567/3201385

2. form表单添加 enctype=”multipart/form-data”

  <form id="form1" action="/Router/up/load" method="post" enctype="multipart/form-data" >
        <input type="file" id="file" name="file"></input>
        <input type="submit" onclick="" id="btn" value="上传">
  </form>

3. 后台controller中一行代码就ok了。

默认上传路径为工程目录下”/upload”文件夹下

UploadFile files = getFile(getPara("file"));

错误1:java.lang.RuntimeException: java.io.IOException: Posted content length of 39052690 exceeds limit of 10485760上传的文件大小超出了限制

解决方法:

public void configConstant(Constants me) {
    //默认10M,此处设置为最大1000M
    me.setMaxPostSize(100*Const.DEFAULT_MAX_POST_SIZE);
}

二、ajaxfileupload上传

参考链接:

http://blog.csdn.net/u013539342/article/details/50609648

需要用到的包和资源

js文件:

jQuery.min.js(需要jQuery的支持) 
ajaxfileupload.js(处理异步上传的文件)

外部包:

jfinal-2.2-bin-with-src.jar(JFinal核心包) 
fastjson-1.2.7-sources.jar和fastjson-1.2.7.jar(用于json数据的处理) 
cos-26Dec2008.jar(支持JFinal自带的上传功能)

html:

<!-- 上传图片 -->
<input type="file" name="uploadfile" id="uploadfile">
<button id="upload" onclick="return false;">上传</button>

js:

$(document).ready(function() {
    $('#upload').click(function() {
        upload($('#uploadfile').val());   
    });
});

function upload(fileName) {
    $.ajaxFileUpload({
        url : '/upload',   //提交的路径
        secureuri : false, // 是否启用安全提交,默认为false
        fileElementId : 'uploadfile', // file控件id
        dataType : 'json',
        data : {
            fileName : fileName   //传递参数,用于解析出文件名
        }, // 键:值,传递文件名
        success : function(data, status) {
            alert("上传成功");
        },
        error : function(data, status) {
            alert("上传失败");
        }
    });
}

Controller

    //上传文件
    public void upload(){
        UploadFile uploadFile = getFile();//在磁盘上保存文件
        String uploadPath = uploadFile.getUploadPath();//获取保存文件的文件夹
        String fileName = uploadFile.getFileName();//获取保存文件的文件名
        String filePath = uploadPath+"\\"+fileName;//保存文件的路径
        String resultFileName = FileUtil.instance.changeFileName(filePath);//为了避免相同文件上传冲突,使用工具类重新命名

        //也可以使用获取参数方式获取文件名
        /*String filename = getPara("fileName");
        filename = filename.substring(filename.lastIndexOf("\\")+1);*/

        //设置返回的json
        JSONObject json = new JSONObject();
        json.put("status", "success");//设置状态
        json.put("fileName", resultFileName);
        renderJson(json);
    }

FileUtil.java

public class FileUtil {
    public static final FileUtil instance = new FileUtil();

    // 随机一个文件名
    public String randomFileName() {
        Date dt = new Date(System.currentTimeMillis());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyMMddHHmmssSSS");
        String fileName = sdf.format(dt);
        return fileName;
    }

    /**
     * 修改文件名
     * @param filePath
     *            eg:D:/gai.jpg
     * @return
     */
    public String changeFileName(String filePath) {
        File file = new File(filePath);// 指定文件名及路径
        String name = randomFileName() + ".xlsx";
        //文件夹位置
        String path = filePath.substring(0, filePath.lastIndexOf("\\"));
        String newFilePath = path+"\\"+name;
        file.renameTo(new File(newFilePath)); // 改名
        return name;
    }
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值