最近做一个项目需要用到上传下载,文件上传在服务器中 为防止文件名重复,我用时间的gettime()方法 做文件名,原文件名和修改后的文件名都保存到数据库中,下载不是用文件读取,二十用超链接直接连接服务器,问下载时,怎么样将文件名变为原来的文件名

解决方案 »

  1.   

    直接连接向服务器不太安全。
    原文件名可能为中文的,那么直接不好做!下载不了,不能有中文路径!你可能会说,把中文编码不就得了,确实,经过URLEncoder编码后是可以,
    但是编码后你总得解码吧?这个解决不也就是要在后台操作了吧。既然这样,个人认为写下载方法,传个ID过来,然后去做一个查询的操作。
    这里你就可以获取到文件存放路径、原文件名了,然后你在以URLEncoder编码
    这样在客户端不会是乱码了。部份代码如下:response.setContentType("application/x-msdownload;charset=utf-8");
    response.reset();// 清除缓存中的数据
    response.setHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(fileName,"utf-8"));
    BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());
    int byteread = 0;
    while ((byteread = input.read(buf)) != -1) {
    output.write(buf, 0, byteread);
    }
    response.flushBuffer();//这句代码很重要,把缓冲区中的所有数据发往客户端
      

  2.   

    原来出现+++++++++++的原因是:我从数据库中读取的文件名后有空格,因为数据库的字段我设置成char类型的,讲字符串trim一下就OK了