spring MVC文件的上传与下载

目录

一、准备

1.工具

 2.新建一个maven项目

3.pom.xml文件导包

 4.在springMVC.xml里面进行配置

5.新建一个jsp页面,取名file.jsp

二、文件的上传

1.在新建的jsp页面加入一个文件上传的表单

2.在后台新建一个java文件,取名随意发挥

3.多种命名方式

4.多个文件上传

5.jsp页面多添加一些input标签

6.实现多个文件循环上传

三、文件的下载

1.jsp添加一个下载的标签,如

2.后台写文件下载的方法

四、在别人电脑下载与上传

1.问题

 2.连接方法


一、准备

1.工具

  1. 代码工具:IntelliJ IDEA 2020.2.2
  2. 环境:apache-maven-3.2.2
  3. 容器:apache-tomcat-8.5.63
  4. jdk:jdk1.8.0_261

 2.新建一个maven项目

具体可以参考上一篇ssm+layui的前半部分

3.pom.xml文件导包

<!-- 文件上传 -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

 4.在springMVC.xml里面进行配置

可以在配置里面设置上传文件大小以及格式

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 上传文件的尺寸,以kb为单位 -->
        <property name="maxUploadSize">
            <value>10240</value>
        </property>
        <property name="defaultEncoding" value="utf-8"></property>
    </bean>

要记住是以kb为单位,自己可以事先计算一下大概要上传多大的文件

5.新建一个jsp页面,取名file.jsp

名字也可以自己随便取,不影响运行

二、文件的上传

1.在新建的jsp页面加入一个文件上传的表单

<form action="fileUpload.do" method="post" enctype="multipart/form-data">
    <input type="file" name="multipartFile">
    <input type="submit" value="上传">
</form>

2.在后台新建一个java文件,取名随意发挥

/**
     * 上传文件
     * @param multipartFile
     * @return 路径
     */
    @RequestMapping(value = "/fileUpload.do", method = RequestMethod.POST)
    public String fileUpload(@RequestParam MultipartFile multipartFile){
        //a.png,获取原始名字
        String oldName = multipartFile.getOriginalFilename();
        //可以先不写下面的代码,通过这两行代码在控制台查看一下自己上传文件的名字
        //检测一下代码运行是否正常
        System.out.println("名字:"+oldName);

        //通过分割得到结尾后缀 .png
        String endName = oldName.substring(oldName.lastIndexOf("."));
        System.out.println(endName);

        //产生随机数名字
        UUID uuid = UUID.randomUUID();
        //新的名字 = 随机数 + 后缀
        String newName = uuid+endName;
        System.out.println(newName);


        //上传的文件对象复制到本地,自己随便挑选文件夹即可
        String a = "D:\\浏览器下载\\";
        //D:\浏览器下载\7-9作业.txt
        File file = new File(a+multipartFile.getOriginalFilename());

        try {
            //把File对象名字放进来
            multipartFile.transferTo(file);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //运行成功后,返回本页面
        return "file";
    }

这里有一个非常重要的地方,表单里面input框的namemultipartFile 我们后台fileUpload()方法里面的 MultipartFile 对象名也一定是multipartFile ,可以和我写的name不一样,但两者name一定要一致,不然页面运行会报错

这时候就可以进行单个文件的上传了,自己可以测试一下是否上传成功

3.多种命名方式

  1. 随机数命名
            //产生随机数名字
            UUID uuid = UUID.randomUUID();
            //新的名字 = 随机数 + 后缀
            String newName = uuid+endName;
            System.out.println(newName);
  2. 时间戳命名
            //生成时间戳
            String name = new SimpleDateFormat("yyyyMMddHHmmss").format();
            //新的名字 = 随机数 + 后缀
            String newName = name+endName;
            System.out.println(newName);
  3. 自己拼接名字
            //自己拼接名字
            String name = "新名字"+endName;
            System.out.println(name);
  4. 等等多种方式

4.多个文件上传

单个文件的上传已经可以实现了,那么多个文件上传要怎么操作呢?

多个文件的上传有带你类似于多个数据提交,这时候我们可以用到数据来进行接收

5.jsp页面多添加一些input标签

记住name属性和后台保持一致

<form action="fileUpload.do" method="post" enctype="multipart/form-data">
    <input type="file" name="multipartFile">
    <input type="file" name="multipartFile">
    <input type="file" name="multipartFile">
    <input type="submit" value="上传">
</form>

6.实现多个文件循环上传

这时候就要把接收单个参数的方法变成用数组接收,即把fileUpload(@RequestParam MultipartFile multipartFile)改为fileUpload(@RequestParam MultipartFile multipartFile[ ])

/**
     * 上传文件
     * @param multipartFile
     * @return 路径
     */
    @RequestMapping(value = "/fileUpload.do", method = RequestMethod.POST)
    public String fileUpload(@RequestParam MultipartFile multipartFile[]){

        //上传的文件对象复制到本地
        String a = "D:\\浏览器下载\\";

        try {
            //通过循环添加多个数据
            for (MultipartFile s:multipartFile){
                File file = new File(a+s.getOriginalFilename());
                s.transferTo(file);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "file";
    }

三、文件的下载

1.jsp添加一个下载的标签,如<a></a>等

<!--        路径   后台接收的变量名       文件名称,全名称-->
<a href="downLoad.do?fileName=5470c5f2-df88-4435-af8d-1c14a5fa9df2.txt">下载文件</a>

2.后台写文件下载的方法

/**
     * 下载文件
     * 1.根据文件名找到硬盘中的文件
     * 2.读取硬盘上的文件   读取
     * 3.响应给客户端  写出来
     * @param fileName
     * @param response
     * @return null
     */
    @RequestMapping(value = "/downLoad.do")
    public String downLoad(String fileName, HttpServletResponse response){

        String filePath = "D:\\浏览器下载\\"+fileName;
        File file = new File(filePath);
        //设置响应回去的编码格式
        response.setCharacterEncoding("utf-8");
        //响应回去的格式
        response.setContentType("multipart/form-data");
        //响应头:attachment 以附件的形式响应回去
        response.setHeader("Content-Disposition","attachment;fileName="+fileName);
        //读取硬盘的文件对象
        try {
            //运用io流
            InputStream input = new FileInputStream(file);
            byte[] bytes = new byte[(int)file.length()];
            //读取文件
            input.read(bytes);
            //得到输出流,响应给客户端
            response.getOutputStream().write(bytes);

            //关流
            input.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

因为我用的<a>标签传输的数据,所以默认是用的GET方法,如果有用POST提交的要记得在@RequestMapping 的属性里用post截取

四、在别人电脑下载与上传

1.问题

  1. 两者必须连接同一个wifi
  2. 局限性太大,娱乐一下还是可以的,不适合大文件的下载与传输

 2.连接方法

在保证两者连接同一wifi后,在浏览器地址栏输入对方地址即可

 把localhost改为对方电脑的IP地址,8080是tomcat端口,后面接上对方创建的file.jsp路径,即对方的文件下载与上传的jsp页面,这样就可以将自己电脑的文件上传给对方了,下载同理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值