文件的上传

1.添加依赖

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.2</version>
</dependency>

2.配置web.xml

<!-- 配置MultipartResolver,用于上传文件,使用spring的CommonsMultipartResolver -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="500000"/>
        <property name="defaultEncoding" value="UTF-8"/>
<!--        defaultEncoding:请求的编码格式,默认为 ISO-8859-1,此处设置为 UTF-8(
        注:defaultEncoding 必须和 JSP 中的 pageEncoding 一致,以便正确读取表单的内容)。-->
<!--        maxUploadSize:上传文件大小上限,单位为字节。-->
    </bean>

3.jsp页面:

    基于表单的文件上传需要使用 enctype 属性,并将它的值设置为 multipart/form-data,同时将表单的提交方式设置为 post。

    表单的 enctype 属性指定的是表单数据的编码方式,该属性有以下 3 个值:

    * application/x-www-form-urlencoded:这是默认的编码方式,它只处理表单域里的 value 属性值。

    * multipart/form-data:该编码方式以二进制流的方式来处理表单数据,并将文件域指定文件的内容封装到请求参数里。

    * text/plain:该编码方式只有当表单的 action 属性为“mailto:”URL 的形式时才使用,主要适用于直接通过表单发送邮件的方式。

单个文件上传:

实体类:

 控制层:

package com.openlab.controller;
import com.openlab.bean.FileDomain;
import com.openlab.bean.MultiFileDomain;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;
import java.util.UUID;


@Controller
public class FileUploadController {
    // 得到一个用来记录日志的对象,这样在打印信息时能够标记打印的是哪个类的信息
    private static final Log logger = LogFactory.getLog(FileUploadController.class);


    @RequestMapping("getFileUpload")
    public String getFileUpload() {
        return "fileUpload";
    }

    /**
     * 单文件上传
     */
    @RequestMapping("/fileupload")
    public String oneFileUpload(@ModelAttribute FileDomain fileDomain, HttpServletRequest request) {
        /*
         * 文件上传到服务器的位置“/uploadfiles”,该位置是指 workspace\.metadata\.plugins\org.eclipse
         * .wst.server.core\tmp0\wtpwebapps, 发布后使用
         */
        //Application作用域
        String realpath = request.getServletContext().getRealPath("/upload");
        /*
       临时路径 D:\IDEA项目\Spring-MVC-\SPRING-MVC-annotation\target\SPRING-MVC-annotation-1.0-SNAPSHOT\upload
         */
        System.out.println(realpath);
//        String path="D:";
        /*
        上传到本地磁盘
         */
        //UUID.randomUUID()防止文件重名
        String fileName = fileDomain.getMyfile().getOriginalFilename();


        File targetFile = new File(realpath, fileName);
        System.out.println(targetFile);
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        // 上传
        try {
            fileDomain.getMyfile().transferTo(targetFile);
            logger.info("成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "showFile";
    }
    @RequestMapping("/getmultiFile")
    public String getmultiFile() {
        return "multiFiles";
    }

上传成功展示层:

文件描述:${fileDomain.description }
<!-- fileDomain.getMyFile().getOriginalFilename()-->
文件名称:${fileDomain.myfile.originalFilename }

多个文件上传:

步骤:

实体类:

 控制层:

    /**
     * 多文件上传
     */
    @RequestMapping("/multifile")
    public String multiFileUpload(@ModelAttribute MultiFileDomain multiFileDomain, HttpServletRequest request) {
        String realpath = request.getServletContext().getRealPath("uploadfiles");
        File targetDir = new File(realpath);
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }
        List<MultipartFile> files = multiFileDomain.getMyfile();
        System.out.println("files"+files);
        for (int i = 0; i < files.size(); i++) {
            MultipartFile file = files.get(i);
            String fileName = file.getOriginalFilename();
            File targetFile = new File(realpath, fileName);
            // 上传
            try {
                file.transferTo(targetFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return "showMulti";
    }
}

jsp页面:

<form action="${pageContext.request.contextPath}/multifile" method="post" enctype="multipart/form-data">
   选择上传文件1: <input type="file" name="myfile"/>
    文件描述1:<input type="text" name="description">
    选择上传文件2: <input type="file" name="myfile"/>
    文件描述2:<input type="text" name="description">
    选择上传文件3: <input type="file" name="myfile"/>
    文件描述3:<input type="text" name="description">
    <input type="submit" value="提交"/>
</form>

上传成功展示页面:

<table border="1px">
    <tr>
        <td>详情</td>
        <td>文件名</td>
    </tr>
    <!-- 同时取两个数组的元素 -->
    <c:forEach items="${multiFileDomain.description}" var="description"
               varStatus="loop">
        <tr>
            <td>${description}</td>
            <td>${multiFileDomain.myfile[loop.count-1].originalFilename}</td>
        </tr>
    </c:forEach>
    <!-- fileDomain.getMyfile().getOriginalFilename() -->
</table>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值