SpringMVC-文件的上传与下载

        SpringMVC-文件的上传与下载与servlet原生的上传和下载功能的思路一样,只不过它们的写法有区别,涉及到IO流。

        文件下载:把文件从服务器复制(下载)到浏览器。

        文件上传:把文件从浏览器复制到服务器。

一、文件下载

其实,下载功能,比如你在浏览器下载图片,只需右键另存,就是说好多浏览器已经自带了。

但是,我们还是要学一下的嘛!

        实现文件的下载,需要使用到ResponseEntity类型: 用在控制器方法的返回值类型,那么该控制器的返回值就是响应到浏览器的响应报文。(其实就是说,下载只需要把响应报文的响应体设置为“我们要下载的文件”,就可以响应到浏览器!)

1.先导入一张图片:

 2、index.html上写入跳转链接

3、在Controller层执行以下代码(这个是一个模板,可直接套用!!路径做修改就好!!)

      实现文件的下载,需要使用到ResponseEntity类型  

      ResponseEntity:可以作为控制器方法的返回值,表示响应到浏览器的完整的响应报文

@Controller
public class FileUpAndDownController {

    @RequestMapping("/test/down")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws
            IOException {
//获取ServletContext对象
        ServletContext servletContext = session.getServletContext();
//获取服务器中文件的真实路径
        String realPath = servletContext.getRealPath("img");
        realPath = realPath + File.separator + "csdn.jpg";
//创建输入流
        InputStream is = new FileInputStream(realPath);
//创建字节数组,is.available()获取输入流所对应文件的字节数(把字节全部获取)
        byte[] bytes = new byte[is.available()];
//将流读到字节数组中,文件的字节下载到浏览器
        is.read(bytes);
//创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
// 设置要下载方式以及下载文件的名字。
// Content-Disposition:设置下载文件的下载方式
// attachment:以附件的方式进行下载
// ;filename=1.jpg:设置下载文件默认的名字
        headers.add("Content-Disposition", "attachment;filename=csdn.jpg");
//设置响应状态码,(.OK,,响应码为200,成功)
        HttpStatus statusCode = HttpStatus.OK;
//创建ResponseEntity对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);//响应体、响应头、响应状态码
//关闭输入流
        is.close();
        return responseEntity;
    }
}

二、文件上传

1、在index.xml设置form表单,提交按钮。

      注意:要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" 

      解析:enctype属性:浏览器向服务器传输请求参数的方式("multipart/form-data":表单中的内容以二进制的方式提交到服务器当中 "application/x-www-form-urlencoded":传输到服务器只有数据、没有文件的)

2、控制器方法:

@Controller
public class FileUpAndDownController {

    @RequestMapping("/test/up")
    /*MultipartFile是SpringMVC提供简化上传操作的工具类*/
    public String testup(MultipartFile photo,HttpSession session) throws IOException {
        /*获取上传的文件的文件名*/
        String fileName = photo.getOriginalFilename();/*要配置上传文件解析器噢!不然是无法获取!具体在下面解释。MultipartFile photo*/
        /*获取ServletContext对象*/
        ServletContext servletContext = session.getServletContext();
        /*获取当前工程下photo目录的真实路径    photoPath:pring_mvc_ajax-1.0-SNAPSHOT*/
        String photoPath = servletContext.getRealPath("photo");
        /*创建photoPath所对应的file对象,创建在war包下*/
        File file = new File(photoPath);
        /*判断file所对应目录是否存在*/
        if(!file.exists()){
            file.mkdir();
        }
        /*上传文件的最终路径*/
        String finalPath = photoPath + File.separator +fileName;
        /*实现文件上传*/
        photo.transferTo(new File(finalPath));
        return "success";
    }
MultipartFile需要文件上传解析器(必须通过文件解析器的解析才能将文件转换为MultipartFile对象)
在springmvc.xml上添加:
<!--配置文件上传解析器 根据id获取-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

添加依赖:用于解析HTTP请求中上传的文件数据。这个库提供了一种简单易用的方式来处理文件上传,包括处理单个文件和多个文件上传。通过引入这个依赖项,你可以在你的Maven项目中使用commons-fileupload库提供的功能。

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

成功运行:

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值