学无先后,达者为师

网站首页 编程语言 正文

springMVC 文件上传和下载

作者:仰望星空的快乐 更新时间: 2022-05-10 编程语言

 文件的下载

获得服务器文件的根路径

String realPath=servletContext.getRealPath("/");

realPath:

E:\SpringMVC\Springmvc-project1\Springmvc-demo2\target\Springmvc-demo2-1.0-SNAPSHOT\

获得根路径之后在跟路径后面加上我想创建的层次名和文件名,可以直接这样写:

String realPath=servletContext.getRealPath("/static/img/1.jpg");

realPath:

E:\SpringMVC\Springmvc-project1\Springmvc-demo2\target\Springmvc-demo2-1.0-SNAPSHOT\static\img\1.jpg

@Controller
public class FileUpAndDown {
    @RequestMapping("/download")
    public ResponseEntity downloadfile(HttpSession session)throws IOException
    {
//        获取servletcontext对象(就是application对象,通过它可以读取配置文件,javaweb基础)
        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()];
//      将输入流中的数据放到字节数组中
//      bytes就是下载文件的字节流,就是响应体
        is.read(bytes);
//       创建HttpHeaders对象设置响应头信息
        MultiValueMap headers=new HttpHeaders();
//        在multivaluemap对象中,设置下载方式(附件形式)            下载的文件名
        headers.add("Content-Disposition","attachment;filename=1.jpg");
//        设置响应状态码
        HttpStatus status=HttpStatus.OK;
//         创建ResponseEntity对象     bytes 文件的字节流也就是响应体,
//         header文件的下载方式,文件临时名称 status 下载状态码,ok表示成功200
        ResponseEntity responseEntity=new ResponseEntity<>(bytes,headers,status);
//        关闭输入流
        is.close();
        return  responseEntity;
    }

文件的上传

不能使用get请求,只能使用post请求


文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"
SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息
上传步骤:
a>添加依赖:


commons-fileupload
commons-fileupload
1.3.1


b>在SpringMVC的配置文件中添加配置:



c>控制器方法:

先把文件要存放在服务器的地址的绝对路径找出来,之后直接 photo.transferTo(file);即可

 //先把文件要存放在服务器的地址的绝对路径找出来,之后直接 photo.transferTo(file);即可
    @RequestMapping("/upload")
//    MultipartFile 对应 java中的File类型
    public String upanddown(MultipartFile photo, HttpSession session) {
        System.out.println("开始上传文件");
        System.out.println("要上传的文件的photo中是:" + photo);
//        获得真实的文件名 filename:node.dll
        String filename = photo.getOriginalFilename();
//        获得真实文件名的后缀  .html   .java
        String suffixName = filename.substring(filename.lastIndexOf("."));
//        随机生成一个文件名
        String uuid = UUID.randomUUID().toString();
//        将随机生成的文件名和后缀拼接,就可以获得要存放的文件名,这样就可以避免文件名重复的问题
        filename = uuid + suffixName;
        System.out.println("真实的文件名filename是" + filename);
//        获得servletcontext对象
        ServletContext servletContext = session.getServletContext();
//        获得文件上传之后,放置该文件的文件夹在服务器的真实路径  (就是文件夹的绝对路径)
//  E:\SpringMVC\Springmvc-project1\Springmvc-demo4\target\Springmvc-demo4-1.0-SNAPSHOT\photo
        String photopath = servletContext.getRealPath("photo");
        File file = new File(photopath);//获取该文件夹
        System.out.println("接收该文件的文件夹在服务器上的绝对路径:" + photopath);
// 检查该photopath路径是否存在,不存在就创建该文件夹
        System.out.println("file" + file);
        if (!file.exists()) {
            file.mkdir();
        }
//        拼接出最后文件的路径
//E:\SpringMVC\Springmvc-project1\Springmvc-demo4\target\Springmvc-demo4-1.0-SNAPSHOT\photo\f772f503-b660-4d13-afbf-e903d911fc7b.html
        String finalpath = file + File.separator + filename;
        try {
            photo.transferTo(new File(finalpath));//核心语句,将photo上传到file文件中
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }


 

原文链接:https://blog.csdn.net/sharesb/article/details/124580431

栏目分类
最近更新