SpringMVC中的文件上传下载详解

SpringMVC中的文件上传下载

SpringMVC的文件上传操作:

需要导入fileupload包和io的包

<dependency>

    <groupId>commons-fileupload</groupId>

    <artifactId>commons-fileupload</artifactId>

    <version>1.3.1</version>

</dependency>

<dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.4</version>

</dependency>

配置文件上传解析器

bean的名字是固定的:multipartResolver

使用Spring表达式 #{1024*1024}

 

详细案例

pom.xml文件中添加依赖:

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

pom.xml文件中添加插件:

<!--文件下载需要的nio,至少1.6版本的jdk才能使用,
而默认是1.5,所以要加个这个,换个jdk版本-->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

    </plugins>

</build>

springmvc.xml中配置上传文件的解析器

<!--上传文件的解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="1048676"/>
</bean>

upload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<!--做文件上传,编码格式必须是multipart/form-data
(由于忘了这一点,一直500,切记切记),methodpost,enctypemultipart/form-data)-->
<form action="${pageContext.request.contextPath}/myfile/upload" method="post" enctype="multipart/form-data">
    <table cellpadding="5px" cellspacing="0px" border="1px">
        <tr>
            <td>用户名:</td>
            <td>
                <input type="text" name="username">
            </td>
        </tr>
        <tr>
            <td>头像:</td>
            <td>
                <input type="file" name="pic">
            </td>
        </tr>
        <tr align="right">
            <td colspan="2">
                <input type="reset" value="重置">
                <input type="submit" value="提交">
            </td>
        </tr>
    </table>

    <a href="${pageContext.request.contextPath}/myfile/download?name=1578216354136360wallpaper_dt.jpg">下载头像</a>
    <%--这个名字,正常应该是查数据库得到的,必须要有,才能下载,认真理解--%>
</form>
</body>
</html>

Controller

package com.xiongluoluo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;

/**
 * Created by Administrator on 2020/1/5 0005.
 */
@Controller
@RequestMapping("myfile")
public class MyFile {
    /*SpringMVC:文件上传*/
    @RequestMapping("upload")
    public ModelAndView upload(String username, MultipartFile pic) throws Exception {
        //文件的类型
        System.out.println(pic.getContentType());
        //请求参数的参数名
        System.out.println(pic.getName());
        //文件名
        System.out.println(pic.getOriginalFilename());
        //文件大小
        System.out.println(pic.getSize());
        System.out.println(username);


        /*存在数据库中的文件不能重复,不然以后用的时候,查的不知道是哪个,
          所以一般要有个标识,这里使用当前时间的毫秒数代替*/
        String newName = new Date().getTime()+pic.getOriginalFilename();

        String path = "F:/"+newName;
        File file = new File(path);
        pic.transferTo(file);
        //---------------------------------上面的代码只是把图片上传到服务器硬盘上
        //----还需要调用service方法 把 用户相关信息保存到数据库中

        //需要把 newName 保存到数据库中的
        return null ;
    }



    /*SpringMVC:文件下载*/
    @RequestMapping("download")
    public ModelAndView download(String name, HttpServletResponse response) throws Exception{
        System.out.println(name);
        response.setContentType("application/x-msdownload");
        response.setHeader("Content-Disposition","attachment;filename="+"jijiking.jpg");
        Files.copy(Paths.get("F:/"+name), response.getOutputStream());
        /*这个位置要有这个名字的那张图片*/
        return null;
    }
}



























 

 

 

发布了100 篇原创文章 · 获赞 7 · 访问量 7550

猜你喜欢

转载自blog.csdn.net/qq_40245464/article/details/103845727