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;
        }
    }
  • 相关阅读:
    30130413 腾讯笔试
    未来网络 SDN
    XAML实例教程系列 XAML传递参数到值转换类实例
    【转】Silverlight MVVM 贴近实战(一)
    XAML实例教程系列 依赖属性和附加属性
    Silverlight开发工具汇总
    XAML实例教程系列 类型转换器(Type Converter)
    XAML实例教程系列 标记扩展(Markup Extensions)
    XAML实例教程系列 事件(Event)
    [转]XAML实例教程系列 命名空间(NameSpace)
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/5844742.html
Copyright © 2011-2022 走看看