JFinal文件上传下载

文件下载: 

先在后端准备好action,可以是一个通用的文件下载action,也可以是为每一个或每一类文件下载准备一个action,并在此 action 中使用一下 renderFile(...),此方法中的参数一般由页面传过来的参数决定,也可能是通过传过来的参数去数据库中去查询要下载的文件名。代码可能是这样的:

public void download() {
   renderFile(Db.queryStr("select file_name from downloads where id=?", getPara()));
}

然后在页面,直接用url指向该action即可,如 <a href="/download/123">JFinal手册下载</a>


追问:
<a href="/download/123">如果条件有多个,后面怎么写,有可能为空的,比如关键字搜索,另外用ajax能实现这功能吗?


如果有参数就直接在后天添加参数,比如::<a href="/download/123?name=${user.name}&age=${user.age}">,至于空值,在后台判断哈 

----------------------------------------Hello World 的分割线--------------------------------------

文件上传:
JFinal Controller中提供了 getFile(...)与getFiles(...)系列方法,其中参数最全的两个方法如下:

public UploadFile getFile(String parameterName, String saveDirectory, Integer maxPostSize, String encoding)
 
public List<UploadFile> getFiles(String saveDirectory, Integer maxPostSize, String encoding)
除了以上两个方法以外,其它方法全是使用默认参数对这两个方法的转调,所以会用这两个方法足以。


    parameterName是指在表单中file表单域的名称,saveDirectory是指文件保有存路径,maxPostSize是指文件最大长度,encoding是指文件编码。


    getFile(...)系列方法获取单个文件上传,getFiles(...)获取多文件上传。


    如果需要使用getPara(..)系列方法,则需要先调用getFile或getFiles系列方法之一,因为multipart request的解析是在调用本系列方法时解析的。


    文件上传支持需要cos-26Dec2008.jar这个包,此包在JFinal发行包中有提供。另外还需要在上传表单中设置enctype="multipart/form-data"。


    JFinal文件上传与struts有不同之处,struts是将上传的文件先缓存到临时目录中,然后让开发者处理,通常是将文件移动或copy,而JFinal采用更加高效的方式,可以在上传后直接保存到目标目录下。


     总结JFinal处理文件上传,只需两件事:一是将cos-26Dec2008.jar包引入,二是在Controller中调用getFile或getFiles方法.

------------------关于文件名的讨论:
上传上去的文件名在html 页面中的 <input type="file" name="这里定义"。 JFinal 在后台能获取到,并能能改名 :)


UploadFile file = getFile(); 得到文件的时候吗, 文件已经在服务器的硬盘上了。


暂时没实现这功能,如果要实现,我打算也是给 UploadFile 加一个方法叫 renameTo(...),这样灵活性更高 :)

---------------------------个例:

/**
 * FileUploadController 接收上传的文件
 */
public class FileUploadController extends Controller {
    private final int MAXSize = 50 * 1024 * 1024; // 50M
    private String filedir=PathKit.getWebRootPath() + "\\upload\\uservideo\\";//指定用户训练视频文件上传路径
 
    /**
     * 接收上传的文件
     * 注意:前提是lib中引入cos-26Dec2008.jar包
     */
    public void upload() {
        // TODO Auto-generated method stub
        try {
//          UploadFile upFile = getFile();//单个上传文件一句搞定  默认路径是 upload
//          UploadFile upFile = getFile("FILE", filedir, maxSize, "utf-8");//只用于表单提交方式, 单个上传文件
            List<UploadFile> upFiles = getFiles(filedir, MAXSize, "utf-8");//批量上传文件
            for (UploadFile fileItem : upFiles) {
                 
                String fPath=filedir+fileItem.getOriginalFileName();
                System.out.println("上传fPath"+fPath);
                String newPath=filedir+fileItem.getOriginalFileName().replace(".", "1.");//例如:交叉接触动作1.3gp
                File oldFile=new File(fPath);
                File newFile=new File(newPath);
                if(newFile.exists()){
                    System.out.println("-------------删除"+fileItem.getOriginalFileName());
                    //删除旧的
                    oldFile.delete();
                    //新的重命名
                    boolean updateName=newFile.renameTo(oldFile);
                    System.out.println("-------------updateName:"+updateName);
                     
                }
                 
            }
             
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            renderJson("status", "0");//失败
        }
        renderJson("status", "1");//成功
 
    }
}
需要在 renderJson("status", "0");//失败 行下加return返回,否则失败了最终还是返回 1 成功。


  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值