首页 > 其他分享 >SpringMVC09 - 文件的下载与上传

SpringMVC09 - 文件的下载与上传

时间:2023-02-17 18:13:42浏览次数:31  
标签:文件 String photo SpringMVC09 ResponseEntity new 上传 下载

文件下载

ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文使用ResponseEntity实现下载文件的功能

①浏览器触发下载
<a th:href="@{/test/down}">下载图片</a>
②控制器方法
@RequestMapping("/test/down")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
    //获取ServletContext对象
    ServletContext servletContext = session.getServletContext();
    
    //获取服务器中文件的真实路径
    String realPath = servletContext.getRealPath("/static/img/1.jpg");
    
    //创建输入流
    InputStream is = new FileInputStream(realPath);
    
    //创建字节数组,is.available()获取输入流所对应文件的字节数
    byte[] bytes = new byte[is.available()];
    
    //将流读到字节数组中
    is.read(bytes);
    
    //创建HttpHeaders对象设置响应头信息
    MultiValueMap<String, String> headers = new HttpHeaders();
    
    //设置要下载方式以及下载文件的名字
    headers.add("Content-Disposition", "attachment;filename=1.jpg");
    
    //设置响应状态码
    HttpStatus statusCode = HttpStatus.OK;
    
    //创建ResponseEntity对象
    ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers,statusCode);
    
    //关闭输入流
    is.close();
    
    return responseEntity;
}

文件上传

文件上传要求 form表单的请求方式必须为 post,并且添加属性 enctype="multipart/form-data"

SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息

上传步骤:

①添加依赖:
<!--https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload-->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
②在SpringMVC的配置文件中添加配置:
<!--必须通过文件解析器的解析才能将文件转换为MultipartFile对象,id 和 class 都是固定的-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
③浏览器上传文件
<form th:action="@{/test/up}" method="post" enctype="multipart/form-data">
    头像:<input type="file" name="photo"><br>
    <input type="submit" value="上传">
</form>
④控制器方法:
@RequestMapping("/testUp")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {
    //获取上传的文件的文件名
    String fileName = photo.getOriginalFilename();
    
    //处理文件重名问题
    String hzName = fileName.substring(fileName.lastIndexOf("."));
    fileName = UUID.randomUUID().toString() + hzName;
    
    //获取服务器中photo目录的路径
    ServletContext servletContext = session.getServletContext();
    String photoPath = servletContext.getRealPath("photo");
    
    //创建photoPath对应的文件对象
    File file = new File(photoPath);
    
    //判断 file目录是否存在
    if(!file.exists()){
    	file.mkdir();
    }
    String finalPath = photoPath + File.separator + fileName;
    
    //实现上传功能
    photo.transferTo(new File(finalPath));
    
    return "success";
}

标签:文件,String,photo,SpringMVC09,ResponseEntity,new,上传,下载
From: https://www.cnblogs.com/Ashen-/p/17131143.html

相关文章

  • dokuwiki编辑器支持ppt上传
    ​ Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的......
  • yunUI组件库解析:图片上传与排序组件yImgPro
    yunUI是笔者开源的微信小程序功能库。目前其中包含了一些复杂的功能组件。方便使用。未来它将分为组件、样式、js三者合为一体,但分别提供。本文所用代码皆来源于组件库中的......
  • PHP Cache_Lite 下载及使用
    https://github.com/pear/Cache_Litecomposerrequirepear/cache_litecomposer如果提示root不安全可以切换为www用户su-www-s/bin/bashcomposer加载原理,有空再研究......
  • MeterSphere 接口测试使用之下载文件
    1背景在我们实际应用中,需要测试下载文件接口,但是没有浏览器又如何直接下载呢?MeterSphere可以使用BeanShell写脚本的方式来实现该测试。2实现原理1、通过写BeanShell后......
  • 博客园本地上传markdown(自记)
    最近开始要写很多的博客,无奈之前每篇博客都要将本地的图片拖动上传一番,才能完整地发好一篇随笔。便STFW了一下,发现了好东西。记以自用。项目地址:https://github.com/do......
  • 记录uniapp-小程序文件上传问题
    1.支付宝文件上传问题 uni.uploadFile如果缺少fileType运行到微信没有问题,但是运行到支付宝会报错,需要补齐fileType2.接口返回需要注意,res.data为字符串,需要转换JSON......
  • Solid Edge ST6 安装包下载及图文安装教程​
    SolidEdge是最完整的混合2D/3DCAD系统,采用同步技术加速设计和编辑过程,增强了对重用导入几何的支持。SolidEdge是Velocity系列解决方案组合的关键组成部分。它是一个优秀的工......
  • Solid Edge ST7 安装包下载及图文安装教程​
    SolidEdge是最完整的混合2D/3DCAD系统,采用同步技术加速设计和编辑过程,增强了对重用导入几何的支持。SolidEdge是Velocity系列解决方案组合的关键组成部分。它是一个优秀的工......
  • Solid Edge ST8 安装包下载及图文安装教程​
    SolidEdge是最完整的混合2D/3DCAD系统,采用同步技术加速设计和编辑过程,增强了对重用导入几何的支持。SolidEdge是Velocity系列解决方案组合的关键组成部分。它是一个优秀的工......
  • Solid Edge ST9 安装包下载及图文安装教程​
    SolidEdge是最完整的混合2D/3DCAD系统,采用同步技术加速设计和编辑过程,增强了对重用导入几何的支持。SolidEdge是Velocity系列解决方案组合的关键组成部分。它是一个优秀的工......