Jfinal实现文件上传的例子

现在在学习JFinal,学到了文件上传的功能, 在API中是这样说的:

文件上传:

Controller 提供了 getFile 系列方法支持文件上传。特别注意:如果客户端请求为 multipart requestform 表单使用了 enctype="multipart/form-data"),那么必须先调用 getFile 系列方法才 能使 getPara 系列方法正常工作,因为 multipart request 需要通过 getFile 系列方法解析请求体中 的数据,包括参数。

文件默认上传至项目根路径下的 upload 子路径之下,该路径称为文件上传基础路径。可以 在 JFinalConfig.configConstant(Constants me)方法中通过 me.setBaseUploadPath(baseUploadPath) 设置文件上传基础路径,该路径参数接受以”/”打头或者以 windows 磁盘盘符打头的绝对路径, 即可将基础路径指向项目根径之外,方便单机多实例部署。当该路径参数设置为相对路径时, 则是以项目根为基础的相对路径。

也就是说:如果不设置上传路径的话;默认的是在webapp的目录下建一个upload文件夹就可以了,但是这样一来,如果项目需要重新部署等操作的话上传的文件就没有了,  所以我们还是自己新建一个上传的路径


我是在userController里进行上传的,  先给大家看下我的项目结构:




我是在idea里搭建的项目,用的是maven仓库,首先看下maven仓库里的配置:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>boKeDemo</groupId>
  <artifactId>BoKeDemo</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>BoKeDemo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!--  配置jetty运行环境 -->
    <dependency>
      <groupId>com.jfinal</groupId>
      <artifactId>jetty-server</artifactId>
      <version>8.1.8</version>
    </dependency>
    <dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-jsp</artifactId><version>9.2.15.v20160210</version></dependency>
    <dependency>
      <groupId>com.jfinal</groupId>
      <artifactId>jfinal</artifactId>
      <version>2.2</version>
    </dependency>
    <dependency>
      <groupId>com.jfinal</groupId>
      <artifactId>cos</artifactId>
      <version>26Dec2008</version>
    </dependency>
    <!-- jstl -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- 阿里巴巴数据连接池 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.29</version>
    </dependency>
    <!-- mysql -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.41</version>
    </dependency>
    <!-- c3p0 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>BoKeDemo</finalName>
  </build>
</project>

接下来是Service实现层的代码:


package com.demo.service;

import java.io.*;
import java.nio.channels.FileChannel;

/**
 * 上传文件
 * Created by T430 on 2017/5/15.
 */
public class FileService {

    /**
     * 上传文件
     * @param s 上传的文件
     * @param t 需要保存的文件路径地址
     */
    public void fileChannelCopy(File s, File t){
        FileInputStream fis=null;
        FileOutputStream fos=null;
        FileChannel in =null;
                FileChannel out = null;

                try {
                    fis=new FileInputStream(s);//输入流
                    fos = new FileOutputStream(t);//输出流
                    in = fis.getChannel();//得到对应文件通道
                    out =fos.getChannel();//得到输出对应的文件通道

                    in.transferTo(0,in.size(),out);//链接两个通道,并且从in通道读取,然后写入out通道。
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    try {
                        if (null != fis) fis.close();
                        if (null != fos) fos.close();;
                        if (null != in) in.close();
                        if (null != out) out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    }
}

这些写完后,就可以在UserController里写上传的方法了:


 /**
     * 上传文件
     */
    public void upLoad(){
        UploadFile uploadFile = this.getFile();//获取文件

        String fileName = uploadFile.getOriginalFileName();//获取文件名
            String type= fileName.substring(fileName.lastIndexOf("."));//获取文件的类型格式:JPG、png等类型

        File file = uploadFile.getFile();

        FileService fs= new FileService();

        File  t = new File("E:\\"+ UUID.randomUUID().toString()+type);
       try {
           t.createNewFile();//创建新的文件夹
       } catch (IOException e) {
           e.printStackTrace();
       }

        fs.fileChannelCopy(file,t);//上传的文件,和要保存的文件路径

        file.delete();//上传过后,删除缓存文件

        this.renderHtml("success,<a href=\"admin-index.jsp\">back</a>");
    }

最后看下jsp里的代码:需要注意的是  上传文件的话 一定要写上: enctype="multipart/form-data"    , 不然会报错哦


   <form action="/user/upLoad" enctype="multipart/form-data" method="post">
                <input type="file" name="file"></br>
                <input type="submit" value="提交">

              </form>

到此为止,JFinal的上传文件就结束了,大家可以去试下了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值