欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springmvc中下载中文文件名称为下划线的解决方案

程序员文章站 2022-03-08 18:11:33
目录springmvc下载中文文件名称为下划线这个问题很好解决java生成文件名时汉字变为下划线?注意这里两个编码springmvc下载中文文件名称为下划线springboot项目中,在下载文件的时候...

springmvc下载中文文件名称为下划线

springboot项目中,在下载文件的时候,通过封装responseentity,将文件流写入body,这种下载文件的方式,造成了下载的文件名为正文显示为下划线的形式;

这个问题很好解决

直接将输入的文件名的编码格式定义成gbk格式;

如下代码

public static responseentity<filesystemresource> export(file file) throws unsupportedencodingexception {
        if (file == null) {
            return null;
        }
        //这个位置对文件名进行编码
        string filename = new string (file.getname().getbytes("gbk"),"iso-8859-1");
        httpheaders headers = new httpheaders();
        headers.add("cache-control", "no-cache, no-store, must-revalidate");
        headers.add("content-disposition", "attachment; filename=" +filename);
        headers.add("pragma", "no-cache");
        headers.add("expires", "0");
        headers.add("last-modified", new date().tostring());
        headers.add("etag", string.valueof(system.currenttimemillis()));
        return responseentity
                .ok()
                .headers(headers)
                .contentlength(file.length())
                .contenttype(mediatype.parsemediatype("application/octet-stream"))
                .body(new filesystemresource(file));
    }

java生成文件名时汉字变为下划线?

public static void exporttoexcel(string uid, string name, string htmltext, 
httpservletrequest request, httpservletresponse response) {
      htmltext = htmltext.replacefirst("<table>", "<tablefirst>");
      htmltext = htmltext.replaceall("<table>",
            "<table cellpadding=\"3\" cellspacing=\"0\"  border=\"1\" rull=\"all\" 
style=\"border-collapse: collapse\">");
      htmltext = htmltext.replacefirst("<tablefirst>", "<table>");
      try (outputstream out = response.getoutputstream()) {
         string filename = name+ "_" + dateutils.getnow("yyyymmddhhmmss");
//       filename = new string(filename.getbytes(),"utf-8")+ ".xls";
         if ("large".equals(htmltext)) {
            reportingpo report = reportingservice.getbyuid(uid);
            map<string, object> formparameters = generationservice.getformparameters(request.getparametermap(), 
report.getdatarange());
            reporttable reporttable = generationservice.getreporttable(report, formparameters);
            htmltext = reporttable.gethtmltext();
         }
//       response.reset();
         response.addheader("content-disposition", "attachment;filename=" +
 new string(filename.getbytes("utf-8"),"iso-8859-1")+ ".xls");
//       response.setheader("content-disposition", string.format("attachment; filename=%s", filename));
         response.setcontenttype("application/vnd.ms-excel; charset=utf-8");
         response.setcharacterencoding("utf-8");
         response.addcookie(new cookie("filedownload", "true"));
//       out.write(new byte[] { (byte) 0xef, (byte) 0xbb, (byte) 0xbf }); // 生成带bom的utf8文件
         out.write(htmltext.getbytes("utf-8"));
         out.flush();
      } catch (exception ex) {
         throw new runtimeexception(ex);
      }
   }

注意这里两个编码

new string(filename.getbytes("utf-8"),"iso-8859-1")+ ".xls"

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。