• SpringMVC的上传下载


    前言

    上一次我们分享了SpringMVC的入门及基本使用。本次将要分享的内容是SpringMVC的上传下载。


    一、上传

    1、流程

    1、springmvc.xml中添加多功能解析器配置

            导入pom

    1. <dependency>
    2. <groupId>commons-fileuploadgroupId>
    3. <artifactId>commons-fileuploadartifactId>
    4. <version>1.3.3version>
    5. dependency>
    1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    2. <property name="defaultEncoding" value="UTF-8">property>
    3. <property name="maxUploadSize" value="52428800">property>
    4. <property name="resolveLazily" value="true"/>
    5. bean>

    2、前台的页面 添加 多功能表单设置  multipart/form-data

    3、后台要利用multipartFile类进行 文件接收

            注:multipartFile的属性名一定要跟form中的表单属性名一致

            dto

    1. import com.zhw.model.Clazz;
    2. import org.springframework.web.multipart.MultipartFile;
    3. /**
    4. * @author louis
    5. * @create  2022-08-18 21:35
    6. */
    7. public class ClazzDto extends Clazz {
    8. private MultipartFile picFile;
    9. public MultipartFile getPicFile() {
    10. return picFile;
    11. }
    12. public void setPicFile(MultipartFile picFile) {
    13. this.picFile = picFile;
    14. }
    15. }

    4、在idea中完成图片请求地址与硬盘中地址的映射关系

     5、编写web层文件

    ClazzController

    1. // 文件上传
    2. @RequestMapping("/upload")
    3. public String upload(ClazzDto clazzDto){
    4. try {
    5. //前台上传的文件
    6. MultipartFile picFile = clazzDto.getPicFile();
    7. //实际应该配置到resource.properties中
    8. String diskPath="D:/temp/新建文件夹/";//图片存放地址
    9. //http://localhost:8080/upload/mvc/...png
    10. String requestPath="/upload/mvc/";//数据库保存地址,也是访问地址
    11. //拿到上传文件的名字
    12. String filename = picFile.getOriginalFilename();
    13. FileUtils.copyInputStreamToFile(picFile.getInputStream(),new File(diskPath+filename));
    14. //将图片上传图片之后,并且将图片地址更新到数据库中
    15. Clazz clazz=new Clazz();
    16. clazz.setCid(clazzDto.getCid());
    17. clazz.setPic(requestPath+filename);
    18. this.clazzBiz.updateByPrimaryKeySelective(clazz);
    19. }catch (Exception e){
    20. e.printStackTrace();
    21. }
    22. return "redirect:/clz/list";
    23. }

     

     

    二、下载

    流程

    1、点击下载传递文件的ID,通过文件的ID查询出文件的路径

    2、通过文件的请求地址,转换成文件存放的硬盘地址

    3、将硬盘中文件下载下来——>固定代码

    1. @RequestMapping(value="/download")
    2. public ResponseEntity<byte[]> download(Clazz clazz, HttpServletRequest req){
    3. try {
    4. //先根据文件id查询对应图片信息
    5. Clazz clz = this.clazzBiz.selectByPrimaryKey(clazz.getCid());
    6. String diskPath = "D:/Temp/images/";
    7. String reqPath = "/upload/mvc/";
    8. String realPath = clz.getPic().replace(reqPath,diskPath);
    9. String fileName = realPath.substring(realPath.lastIndexOf("/")+1);
    10. //下载关键代码
    11. File file=new File(realPath);
    12. HttpHeaders headers = new HttpHeaders();//http头信息
    13. String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
    14. headers.setContentDispositionFormData("attachment", downloadFileName);
    15. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    16. //MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
    17. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
    18. }catch (Exception e){
    19. e.printStackTrace();
    20. }
    21. return null;
    22. }

     


    总结

    本文仅简单分享了,图片的上传下载,在上传下载的时候注意映射的路径,因为数据库的路径与配置的路径名不一致导致图片没出来。还有就是,注意:multipartFile的属性名一定要跟form中的表单属性名一致

        

    如有错误还望指正,谢谢啦。

     

  • 相关阅读:
    SIT测试和UAT测试区别
    163_技巧_Power BI 一键批量建立自定义字段参数
    3.10 haas506 2.0开发教程-example-TFT
    [TS基础]开发环境,类型的声明
    Java 枚举(Enum)使用
    Modbus入门
    Chapter3 : Fighting COVID-19 with Artificial Intelligence
    Spring配置加载顺序
    【网络是怎么连接的】第四章 探索接入网和网络运营商
    SmartIDE v0.1.18 已经发布 - 助力阿里国产IDE OpenSumi 插件安装提速10倍、Dapr和Jupyter支持、CLI k8s支持
  • 原文地址:https://blog.csdn.net/qq_62331938/article/details/126414462