今天遇到一个问题,在Windows环境上开发,测试环境和正式环境服务器都是linux;
一个导出表格的功能,在本地没问题,发布到linux服务器就报找不到文件问题,但是模板文件已经在linux下了。刚开始以为是模板放的路径错了,,确认好几遍还是有问题。
经过大神的指导,最后发现原来linux文件的文字编码都是UTF-8。
而我们一般的读取文件的方法:
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));//设置网页显示的文件编码
File file = new File(path);
这里没有指定读取文件编码的情况下,可能是拿不到文件的.
方法一:
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));//设置网页显示的文件编码
File file = new File( new String(path.getBytes("utf-8"), "utf-8"));
以UTF-8编码去读取文件就可以拿到了。
方法二:
读取文件路径不能有中文,就能避免此问题。
最后为了和系统其它模块保持一致,我用了第二种方法。用uuid来保存模板的文件名,同时每个模板数据库都需要保存一条记录。