问答详情
源自:2-6 实现文件下载

下载中文名的文件显示文件不存在,下载不带中文的能成功

String path = getServletContext().getRealPath("/") + "material/";

String filename = req.getParameter("filename");

File file = new File(path + filename);

if(file.exists()){

//设置相应类型application/octet-stream

resp.setContentType("application/x-msdownload");

//设置头信息

resp.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");

InputStream inputStream = new FileInputStream(file);

ServletOutputStream ouputStream = resp.getOutputStream();

byte b[] = new byte[1024];

int n ;

while((n = inputStream.read(b)) != -1){

ouputStream.write(b,0,n);


提问者:qq_loli控_03618958 2017-04-26 17:10

个回答

  • qq_时光搁浅_03616809
    2017-05-19 08:56:43

    需要设置编码:    

    resp.setHeader("Content-Disposition",                        "attachment;filename="+URLEncoder.encode(filename,"utf-8"));

    需要导入        import java.net.URLEncoder;


  • 熊猫程序员
    2017-04-27 15:44:23

    如果没有对客户端发送的中文参数进行转码,filename从客户端发过来的值就是乱码,导致在你服务器目录下找不到你要的文件,你可以打印一下filename的值到控制台,我觉得就是编码问题设置一下(request.setContextType(),request.setEncoding()....不知道有没有写错,你百度一下乱码问题。)