pringMVC-文件的上传与下载

文章详细介绍了如何在SpringMVC框架中实现文件的上传和下载功能。文件下载利用ResponseEntity设置响应报文,将文件内容作为响应体发送给浏览器。文件上传则通过MultipartFile接收POST请求中的文件,将其保存到服务器指定路径。整个过程涉及到了Servlet的IO流操作和form表单的enctype属性设置。
摘要由CSDN通过智能技术生成

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上添加:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

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

commons-fileupload commons-fileupload 1.3.1

成功运行:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值