SpringMVC实现文件上传与下载

1.文件上传
文件上传一般包括前端页面的文件选择、文件上传、后台接收文件、保存文件等步骤。

1.1 前端页面HTML代码示例

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

1.2 后台Controller代码示例

@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public String handleFileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request){
        try {
            String fileName = file.getOriginalFilename();
            String path = request.getSession().getServletContext().getRealPath("/upload/" + fileName);
            // 保存文件
            file.transferTo(new File(path));
            request.setAttribute("msg", "文件上传成功!");
        } catch (Exception e) {
            request.setAttribute("msg", "文件上传失败!");
        }
        return "fileupload";
    }
}

其中,@RequestParam("file")注解表示接收名字为file的文件,@RequestMapping(value="/upload", method=RequestMethod.POST)表示请求url为/upload,请求方法为POST。

1.3 文件上传结果展示HTML代码示例

<div style="text-align:center">
    <!-- 如果msg不为空,即为上传失败,添加红色字体颜色 -->
    <p style="${empty msg? 'color:#FF0011': ''}">${msg}</p>
    <img src="upload/${file.name}" alt="no image"/>
    <p>上传文件名字:${file.name}</p>
    <p>上传文件大小:${file.size}</p>
</div>

其中,${}表示引用传参进来的数据,upload/${file.name}表示文件上传之后保存的路径。

2.文件下载
文件下载与文件上传不同,文件下载只能从后台进行处理。一般包含前端页面的选择文件、请求后台数据、后台返回数据等步骤。

2.1 前端页面HTML代码示例

<a href="download?file=example.txt">下载文件</a>

其中,download?file=example.txt表示请求url,file表示后台根据该字段获取文件。

2.2 后台Controller代码示例

@Controller
public class FileDownloadController {

    @RequestMapping("/download")
    public ResponseEntity<byte[]> fileDownload(HttpServletRequest request) throws Exception{
        // 获取文件名,根据文件名从磁盘获取文件
        String fileName = request.getParameter("file");
        String downLoadPath = request.getSession().getServletContext().getRealPath("/upload/" + fileName);
        FileInputStream inputStream = new FileInputStream(new File(downLoadPath));

        // 将文件返回
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        httpHeaders.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(bytes, httpHeaders, HttpStatus.OK);
        inputStream.close();

        return responseEntity;
    }
}

其中,@RequestMapping("/download")表示请求url为/download。

2.3 文件下载结果展示HTML代码示例

文件下载在后台即可完成,无需前端页面展示。

以上即为SpringMVC实现文件上传与下载的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC实现文件上传与下载 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 详解Struts2中json 相互引用死循环解决办法

    下面是详解Struts2中json 相互引用死循环解决办法的完整攻略。 简介 在 Struts2 中,使用 JSON 返回数据时,如果包含相互引用的对象,就会出现死循环的情况。这是因为在序列化时,对象互相引用,导致 Gson 序列化器无法判断对象的终止条件从而产生栈溢出。解决这个问题的方法是给予 JSON 序列化器一些帮助,在序列化时忽略相互引用的部分。 解…

    Java 2023年5月20日
    00
  • Java简化复杂系统调用的门面设计模式

    Java简化复杂系统调用的门面设计模式,也叫做Facade模式,是一种结构型设计模式,目的是为系统中的高层模块提供简化、统一的接口,使系统更易于使用和维护。 下面是实现Java门面设计模式的完整攻略: 1. 定义门面类 首先,我们需要定义一个门面类来隐藏系统中的复杂性。这个类需要提供一个简单的接口,封装系统中的一些复杂操作。 public class Sys…

    Java 2023年5月24日
    00
  • java agent 使用及实现代码

    Java Agent 是一个在 Java 虚拟机启动时就注入的 Java 类,可以对 JVM 接口及类库进行访问和修改,常用作 JVM 监控,代码植入等动态工具的实现。以下是 Java Agent 的使用及实现代码攻略。 简介 Java Agent 是 JVM 提供的一种扩展机制,可以在程序运行时动态地增强、修改、监控程序的功能。Java Agent 简单来…

    Java 2023年5月20日
    00
  • Java中多线程下载图片并压缩能提高效率吗

    Java中多线程下载图片并压缩能提高效率吗 在Java中使用多线程下载图片并压缩,可以提高程序的效率,因为多线程能够充分利用CPU的多核心,同时多个线程并行执行任务,从而加速程序的处理速度。下面详细讲解Java中多线程下载图片并压缩的完整攻略。 步骤一:下载图片 首先需要使用Java的URL和HttpURLConnection类实现图片下载功能,代码如下: …

    Java 2023年5月26日
    00
  • 亲手带你解决Debug Fastjson的安全漏洞

    下面我将为你讲解如何解决Fastjson的安全漏洞。 什么是Fastjson的漏洞? Fastjson是一款被广泛使用的Java JSON解析器和生成器。然而,在Fastjson中存在一些安全漏洞,使得攻击者可以利用它来执行远程代码、绕过安全措施、拒绝服务攻击等。为了保护我们的应用程序免受这些漏洞的影响,我们需要及时采取措施来解决这些漏洞问题。 解决Fast…

    Java 2023年6月15日
    00
  • Spring Bean创建流程分析讲解

    关于Spring Bean创建流程分析的完整攻略,可以从以下几个方面进行讲解: Spring Bean创建流程 Spring Bean的创建流程主要分为以下5个步骤: 定位阶段(Location):Spring通过配置文件或注解等方式确定Bean定义; 加载阶段(Load):将Bean定义解析成Bean对象,并注册到容器中; 实例化阶段(Instantiat…

    Java 2023年5月31日
    00
  • Spring MVC中使用Controller如何进行重定向

    在 Spring MVC 中,我们可以使用 Controller 进行重定向。重定向是指将用户请求重定向到另一个 URL,通常用于处理表单提交后的页面跳转。本文将详细讲解 Spring MVC 中使用 Controller 进行重定向的完整攻略,包括如何使用 RedirectAttributes 和 ModelAndView 两种方式进行重定向,并提供两个示…

    Java 2023年5月18日
    00
  • GraalVM和Spring Native尝鲜一步步让Springboot启动飞起来66ms完成启动

    我来为你详细讲解 “GraalVM 和 Spring Native 尝鲜一步步让 Spring Boot 启动飞起来 66ms 完成启动” 的完整攻略。 什么是 GraalVM 和 Spring Native GraalVM 是一款可以运行 Java 代码的虚拟机,和其他 Java 虚拟机一样,它也可以解释字节码并执行 Java 程序。但是 GraalVM …

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部