美文网首页
SpringMVC(文件下载)

SpringMVC(文件下载)

作者: _FireFly_ | 来源:发表于2020-11-05 09:12 被阅读0次

    index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <a href="download.do?fileName=mybatis-3.5.3.rar">文件下载</a>
      </body>
    </html>
    

    TestController

    package controller;
    
    import org.apache.commons.io.FileUtils;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.net.URLEncoder;
    
    @Controller
    public class TestController {
    
        @RequestMapping("test.do")
        public String test(){
            System.out.println("test好用啦");
            return "welcome.jsp";
        }
    
        //原生方式处理文件的上传
    //    @RequestMapping("upload.do")
    //    public String upload(HttpServletRequest request) throws Exception {
    //        //获取磁盘文件选项的factory
    //        DiskFileItemFactory factory = new DiskFileItemFactory();
    //        //创建一个ServletFileUpload对象
    //        ServletFileUpload upload = new ServletFileUpload(factory);
    //        //让upload对象帮我们去解析request(目的获取数据)
    //        List<FileItem> itemList = upload.parseRequest(request);
    //        //遍历所有的文件项
    //        for(FileItem item : itemList){
    //            //每次循环判断一下当前item是文件还是普通表单对象
    //            if(item.isFormField()){//普通表单数据
    //                String key = item.getFieldName();
    //                String value = item.getString("UTF-8");
    //                System.out.println(key+"--"+value);
    //            }else{//文件数据
    //                String fileName = item.getName();//名字可以自己弄一个规则 确保文件名唯一  UUID
    //                item.write(new File("D://test//",fileName));
    //            }
    //        }
    //        return "welcome.jsp";
    //    }
    
        //文件上传的时候需要一个临时存储
        //factory.setSizeThreshold(1024000);//设置缓存大小
        //factory.setRepository(new File("路径"));
    
        //基于SpringMVC方式的文件上传
        @RequestMapping("upload.do")
        public String upload(String text, MultipartFile upload) throws IOException {
            System.out.println("新的controller执行啦");
            System.out.println(text);
            //文件名字
            String fileName = upload.getOriginalFilename();
            //文件对象
            //upload对象帮我们做传输
            upload.transferTo(new File("D://test//",fileName));
            return "welcome.jsp";
        }
    
        //=================================================================================
    
        //原生方式
    //    @RequestMapping("download.do")
    //    public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {
    //        //1.获取请求传递过来的文件名
    //        String fileName = request.getParameter("fileName");
    //        //2.直接创建文件输入流读取文件
    //        InputStream inputStream = new FileInputStream("D://test//"+fileName);
    //        //3.做响应啦----设置
    //        //  如果服务端存储的文件名字含有中文,需要处理一下
    //        fileName = URLEncoder.encode(fileName,"UTF-8");
    //        //  响应信息头
    //        response.setContentType("application/x-msdownload");
    //        response.setHeader("Content-disposition","attachment;filename="+fileName);
    //        //4.正式开始写数据(输出流)
    //        OutputStream outputStream = response.getOutputStream();
    //        byte[] b = new byte[1024];
    //        int length = inputStream.read(b);//读取有效字节个数
    //        while(length!=-1){
    //            outputStream.write(b,0,length);
    //            outputStream.flush();
    //            length = inputStream.read(b);
    //        }
    //    }
    
    
        //基于SpringMVC方式实现下载
        @RequestMapping("download.do")
        public ResponseEntity<byte[]> download(String fileName) throws Exception {//fileName变量 名字是框架帮我们注入进去的  帮我们组合成了String
            //获取读取文件即可
            File file = new File("D://test//"+fileName);
            //设置响应信息相关
            //  如果有中文 需要处理
            fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
           //设置响应的请求头为文件格式
            HttpHeaders headers = new HttpHeaders();
          //MediaType.APPLICATION_OCTET_STREAM静态常量  ==> application/x-msdownload
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentDispositionFormData("attachment",fileName);
            //将响应信息存入一个返回值对象内即可----ResponseEntity
            byte[] b = FileUtils.readFileToByteArray(file);//使用byte字节数组读取file文件
            return new ResponseEntity(b,headers,HttpStatus.CREATED);
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:SpringMVC(文件下载)

          本文链接:https://www.haomeiwen.com/subject/xyvnvktx.html