美文网首页JAVA
SpringMVC 实现文件下载

SpringMVC 实现文件下载

作者: 光光李 | 来源:发表于2017-05-27 16:51 被阅读491次

    转自:(忘了)

    作为程序员,可能会在不经意间就写出来了一段让自己感到骄傲、欣喜、自豪的垃圾代码。对!就是垃圾代码,此处不需要引号!这种情况是可悲的,更可悲的是你自己一直无法发现自己的垃圾之处!我们如果想成长,想在编程的路上走下去,第一个资本就是要:学会、习惯、坚持写优雅的高效的健壮的代码。这个过程不是一触而就的,只能在日常的小事中,自己编写的一段段小的代码中慢慢改进。

    原本的写法
    /** 
      * @Description 下载文件 
      * @author zhangyd 
      * @date 2015年12月7日 上午10:34:23 
      * @param response 
      * @param file 
      */ 
    public static void downLoadFile(HttpServletResponse response, File file) { 
        if (file == null || !file.exists()) { 
            return; 
        } 
        OutputStream out = null; 
        try { 
            response.reset(); 
            response.setContentType("application/octet-stream; charset=utf-8");      
            response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); 
            out = response.getOutputStream(); 
            out.write(FileUtils.readFileToByteArray(file)); 
            out.flush(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } finally { 
            if (out != null) { 
                try { 
                    out.close(); 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
            } 
        } 
    }
    
    简化的写法
    /**
      * @Description 下载文件
      * @author zhangyd
      * @date 2015年12月11日 下午6:11:33
      * @param fileName
      * @param file
      * @return
      * @throws IOException
      */ 
    public ResponseEntity<byte[]> download(String fileName, File file) throws IOException { 
        String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");  
        HttpHeaders headers = new HttpHeaders(); 
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); 
        headers.setContentDispositionFormData("attachment", dfileName); 
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); 
    }
    

    application文件添加配置,这个是配置response的字符编码的,如果不配置,可能会出现乱码等一系列问题

    <!-- 设置json和response的字符编码 --> 
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
        <property name="messageConverters"> 
            <list> 
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
                <ref bean="stringHttpMessageConverter" /> 
            </list> 
        </property> 
    </bean> 
    <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> 
        <property name="supportedMediaTypes"> 
            <list> 
                <value>text/plain;charset=UTF-8</value> 
            </list> 
        </property> 
    </bean>
    

    相关文章

      网友评论

        本文标题:SpringMVC 实现文件下载

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