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;
        }
    }
  • 相关阅读:
    php设计模式-工厂模式(一)
    php Pthread 线程 互斥锁
    php Pthread 多线程 Worker
    PHP多进程实例
    C# this 关键字
    .NET FileStream文件流,StreamReader文本流,MemoryStream内存流几种流的实例
    深入理解Static关键字修饰符
    SQL Server 视图
    .NET初识委托
    RSA加密
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/5844742.html
Copyright © 2011-2022 走看看