02.CRUD和文件上传下载

目录

一.增删改查测试

二、上传

三、下载


一.增删改查测试

二、上传

1、流程

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

        导入pom

<dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
</dependency>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 文件最大大小(字节) 1024*1024*50=50M-->
        <property name="maxUploadSize" value="52428800"></property>
        <!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常-->
        <property name="resolveLazily" value="true"/>
    </bean>

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

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

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

        dto

 
import com.hz.model.Clazz;
import org.springframework.web.multipart.MultipartFile;
 
/**
 * @author louis
 * @create  2022-08-18 21:35
 */
public class ClazzDto extends Clazz {
    private MultipartFile picFile;
 
    public MultipartFile getPicFile() {
        return picFile;
    }
 
    public void setPicFile(MultipartFile picFile) {
        this.picFile = picFile;
    }
}

 5、编写web层文件

ClazzController

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

 

三、下载

流程

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

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

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

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

猜你喜欢

转载自blog.csdn.net/csnbb/article/details/126416398
今日推荐