zoukankan      html  css  js  c++  java
  • SpringMVC文件下载

    package com.sniper.springmvc.action;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
     
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
     
    @Controller
    public class FileDownloadAction extends RootAction {
     
        private String getFileName(String filePath)
                throws UnsupportedEncodingException {
            String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
            String Agent = request.getHeader("User-Agent");
            if (null != Agent) {
                Agent = Agent.toLowerCase();
                if (Agent.indexOf("firefox") != -1) {
                    fileName = new String(fileName.getBytes(), "iso8859-1");
                } else if (Agent.indexOf("msie") != -1) {
                    fileName = URLEncoder.encode(fileName, "UTF-8");
                } else {
                    fileName = URLEncoder.encode(fileName, "UTF-8");
                }
            }
            return fileName;
        }
     
        /**
         * 需要通过 redirect:download 传递文件路径或者文件类型
         *
         * @param path
         * @param type
         * @return
         * @throws IOException
         */
        @ResponseBody
        @RequestMapping(value = "download")
        public ResponseEntity<byte[]> download(
                @RequestParam(value = "path") String path,
                @RequestParam(value = "type", required = false, defaultValue = "application/vnd.ms-excel") String type)
                throws IOException {
            // 确定各个成员变量的值
            String fileName = getFileName(path);
     
            HttpHeaders headers = new HttpHeaders();
            byte[] body = null;
            HttpStatus httpState = HttpStatus.NOT_FOUND;
            File file = new File(path);
            if (file.exists() && file.isFile()) {
     
                InputStream is = new FileInputStream(file);
                body = new byte[is.available()];
                is.read(body);
                is.close();
                headers.add("Content-Type", type);
                headers.add("Content-Length", "" + body.length);
                headers.add("Content-Disposition", "attachment;filename="
                        + fileName);
                httpState = HttpStatus.OK;
     
            }
     
            ResponseEntity<byte[]> entity = new ResponseEntity<>(body, headers,
                    httpState);
     
            return entity;
        }
    }
  • 相关阅读:
    开始Flask项目
    夜间模式的开启与关闭,父模板的制作
    从首页问答标题到问答详情页
    首页列表显示全部问答,完成问答详情页布局
    制作首页的显示列表
    发布功能完成
    登录之后更新导航
    完成登录功能,用session记住用户名
    完成注册功能
    通过用户模型,对数据库进行增删改查操作
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/5844742.html
Copyright © 2011-2022 走看看