关于SpringMvc下载文件时自定义文件名的问题
发布于 2 年前 作者 alsotang 213 次浏览 来自 问答  二维码

是这样的,我们的项目用的框架是SpringMvc+Spring+Mybatis,其中有一个下载文件的功能,在下载下来的时候需要对其自定义文件名,我们在本地测试这个功能毫无问题,试了几台电脑都行,然后我们把它发布到服务器上去,服务器环境是Tomcat7.0+Jdk1.8和本地开发环境一样,但是测试下载功能的时候,下载下来的文件的文件名就变成了download

这是本地测试的情况,文件名和显示的文件名一样

这是服务上下载的情况,显示的文件名就是download



这是控制层的代码

    [@RequestMapping](/user/RequestMapping)(value="/download",method={RequestMethod.GET,RequestMethod.POST})
    public ResponseEntity downloadFiles(String f0901,HttpServletRequest req,HttpServletResponse resp) {
        
        T09 t09 = lowCardService.selectLowByPrimaryKey(Integer.parseInt(f0901));
        String filenameIdname = t09.getF0903();
        String filename=t09.getF0902();
        ResponseEntity rr;
        resp.reset();
        try {
            //传入文件UUID形成的文件名filenameIdname,再加入本件本身的名字filename
            rr=Utils.downloadfile(filenameIdname,filename,req,resp);
            return rr;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }    
    }

这是实现下载的代码
` public static ResponseEntity downloadfile(String filenameIdname,String filename,HttpServletRequest req,HttpServletResponse resp) {

    
    //下载文件路径
    String path = req.getServletContext().getRealPath("/")+"file/";
    File file = new File(path+filenameIdname);
    HttpHeaders headers = new HttpHeaders();
    
    try {
        //下载显示的文件名,解决文件乱码问题
        String downlaodFilename = URLEncoder.encode(filename); //new String(filename.getBytes("UTF-8"), "iso-8859-1");
        
        //通知浏览器以attachment(下载方式)
        headers.setContentDispositionFormData("attachment", downlaodFilename);
        //二进制流数据
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        System.out.println("-11111");
        resp.setHeader("Content-Disposition", "attachment;fileName="
                + downlaodFilename);
        return new ResponseEntity(FileUtils.readFileToByteArray(file), headers,HttpStatus.CREATED);
    } catch (Exception e) {
        System.out.println(e.getMessage());
        return null;
    }    
}`

这是SpringMvc的配置文件




    
    

    
    

    

    
        
        
            
                
                    
                        
                            
                                
                            
                        
                        
                            
                                
                            
                        
                    
                
            
        
    

    
    
        
        
    

    
        
            
                
                
                
              
                  
                      
                        text/plain;charset=UTF-8  
                      
                  
            
            
        
    

    
        
            UTF-8
        
        
            32505856
        
        
            4096
        
    

本地测试正常,服务器上就这样,真的不知道是什么原因了,请各位大佬帮忙看看,小弟先谢谢各位了

请输入代码
回到顶部