昨天在做文件下载的时候在java文件中对下载流进行处理,但是当路径中出现中文路径是,直接抛出异常,下面是java文件下载代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadUtil {
public static void down(HttpServletRequest request, HttpServletResponse response
,String filename,String filepath) throws Exception{
//response.setContentType("application/x-msdownload");
response.setContentType(" application/x-xls;charset=uft-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment; filename=" + new String(filename.getBytes("utf-8"),"iso8859-1"));
java.io.FileInputStream in = null;
java.io.BufferedInputStream binpu = null;
java.io.BufferedOutputStream bout = null;
OutputStream output = null;
output = response.getOutputStream();
if(filepath.startsWith("ftp://"))//如果是ftp,则用FTP下载
{
FTPHelper ftp = new FTPHelper();
String serverFile = ftp.parseFTPAddress(filepath);
ftp.get(serverFile, output);
output.flush();
}else{
FileInputStream fis = null;
try{
//如果是中文路径,在此处抛出异常
in = new java.io.FileInputStream(filepath);
binpu = new java.io.BufferedInputStream(in);
bout = new java.io.BufferedOutputStream(response.getOutputStream());
byte[] b = new byte[1024];
int i = 0;
while((i = binpu.read(b,0,b.length)) > 0){
bout.write(b, 0, i);
}
bout.flush();
response.flushBuffer();
}catch(Exception e){
e.printStackTrace();
}
finally{
if(fis != null){
fis.close();
fis = null;
}
}
}
if(output != null){
output.close();
output = null;
}
}
}
最后找了半天发现并不是FileInputStream本身的问题,在server配置时没有将编码格式转成utf-8
首先在eclipse中找到配置的sever,在server中找到,server.xml文件,在xml文件中把文件修改成如下这句话,就欧克了
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
关注我,获取400个的赚钱金点子,轻松开启程序员的副业生涯