see
Send Files to Browser Clients the Right Way
http://www.fawcette.com/javapro/2002_03/online/online_eprods/servlets_03_08/use
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename=\""
     + filename + "\"");in your html, try something like
<td><a href="servletName?file=file.txt" target="_blank">file</a></td>

解决方案 »

  1.   

    http://www.csdn.net/Develop/read_article.asp?id=14994
      

  2.   

    这一般需要配合服务器端代码实现,当然,更改客户端注册表也可以实现,但不是办法。参见
    http://www.csdn.net/Develop/read_article.asp?id=13004
    明天再帖一个具体的
      

  3.   

    你要做的是传递文件名字过来
    <%
    'Forcing an image to download using the ADO Stream Object 
    response.contenttype="application/x-unknown"
    response.addheader "Content-Disposition","attachment; filename=" & chr(34) & "logo.gif" & chr(34)response.binarywrite getBinaryFile(server.mappath("logo.gif"))function getBinaryFile(fileSpec)
    Dim adTypeBinary
    adTypeBinary = 1
    Dim oStream
    set oStream = server.createobject("ADODB.Stream")
    oStream.Open
    oStream.Type = adTypeBinary
    oStream.LoadFromFile fileSpec
    getBinaryFile= oStream.read
    set oStream=nothing
    end function
    %>
      

  4.   

    现在是要求用jsp做,而且其他的各个方面已经做好了,页面已经准备好啦,就差:按一下文件名,然后想办法从数据库中将相应的文件记录(是用blob字段保存文件二进制流的)得出来,然后还要解压缩(因为入库前是经过压缩的,是用java.util.zip.*包),只有这样最后才能使windows的那个框正确下载或打开该文件!但现在只给出一个连接,有没有可能做到这一点啊?我现在整天都忙不过来了!以下是我做的压缩程序:    public void doZipCompress(String inputFileName, String outputFileName){
            try{
                FileOutputStream fos = new FileOutputStream(outputFileName);
                CheckedOutputStream cos = new CheckedOutputStream(fos, new Adler32());
                ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cos));
                File inputFile = new File(inputFileName);
                FileInputStream fis = new FileInputStream(inputFile);
                BufferedInputStream bis = new BufferedInputStream(fis, BUFFER);
                ZipEntry entry = new ZipEntry(inputFileName);
                out.putNextEntry(entry);
                int read;
                byte b[] = new byte[BUFFER];
                while((read = bis.read(b, 0, BUFFER)) != -1){
                    out.write(b, 0, read);
                }
                bis.close();
                out.close();
            }catch(FileNotFoundException e){
                e.printStackTrace();
            }catch(IOException e){
                e.printStackTrace();
            }
        }    public void doZipDecompress(String inputFileName, String outputFileName){
            try{
                FileInputStream fis = new FileInputStream(inputFileName);
                CheckedInputStream cis = new CheckedInputStream(fis, new Adler32());
                ZipInputStream zis = new ZipInputStream(new BufferedInputStream(cis));
                ZipEntry entry;
                while((entry = zis.getNextEntry()) != null){
                    FileOutputStream fos = new FileOutputStream(outputFileName);
                    BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
                    int read;
                    byte b[] = new byte[BUFFER];
                    while((read = zis.read(b, 0, BUFFER)) != -1){
                        bos.write(b, 0, read);
                    }
                    bos.flush();
                    bos.close();
                }
                zis.close();
            }catch(FileNotFoundException e){
                e.printStackTrace();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
      

  5.   

    刚想起一个问题,我在jsp中可不可以用ADO Stream Object 的,原为现在用的是jsp与servlet的,现在差不多要走了,先放上来问一下。
      

  6.   

    以下是插入文件到数据库的小段代码:
                Connection conn = this.getConnection();
                conn.setAutoCommit(false);
                PreparedStatement ps = conn.prepareStatement(sql);
                    ps.setBinaryStream(4,this.getFileInputStream(tihs.getFile_path()),this.getFileInputStreamLength(this.getFile_path()));
      

  7.   

    其实这个问题,我觉得不是很难,可能是我理解的太简单了,其实你要实现功能,是不是就是当鼠标点击时,谈出下载提示框。是吗?
    如果是这样,你只需要吧,在连接的地址上,把绝对路径给上就可以了,比如:
    这里注意java里面"\"是转移字符,要用"\\".
    <td><a href="c:\a.txt" target="_blank">file</a></td>
      

  8.   

    但是现在是要从数据库中读出来啊,现在不是有一个现在的文件存放在什么盘的,而是这个文件是用文件流存入数据库的,现在在JSP中得到的文件名其实只是一个名,实际的文件还是一个文件流放在数据库的字段里啊!
      

  9.   

    你的链接必须是这样形式的:
    <a href='xxx.asp?id=xx'>下载txt文件</a>
      

  10.   

    应该是这样的,当你打开页面时,把流写到指定路径下,然后把文件的绝对路径放到一个变量里面,如aa;
    <td><a href="<%=aa%>" target="_blank">file</a></td>
      

  11.   

    这不是java论坛么??看上去象asp论坛哦~~ :)HttpServletResponse对象也有setHeader方法,处理起来和asp相似。把getBinaryFile方法用你自己的inputstream方法替掉就行了。asp还要用ado处理binary文件,不知道那天fso有这个功能就方便了。不知道大家知不知道为什么fso只能处理文本文件,没个binarystream?adodb.stream不是那里都有。我的98就没。
      

  12.   

    对了,java不是不可以用com(jni),只不过没有必要,也没什么意义。ado对象有的功能jdbc基本上都有,再加上一堆stream和readerwriter,应该够用了
      

  13.   

    就是啊,如果只是用servlet将文件流读出,然后将文件流写出来,然后再在html中生成,这样文本文件就可以,但如果是doc,则是乱码一堆,所以现在才要求用windows的那个下载框下载啊!!!
      

  14.   

    乱码是因为你的contentType不对。另外,最好不要用jsp处理,经常不经意就加了回车。
      

  15.   

    contentType要设为什么,有没有一个具体的可以读出word文档的文件流并立即打开该文档???
      

  16.   

    word文档好像是application/msword。当然,文件头不要有问题,因为ie和ns不同,会读文件头来进行类型检查。如果装了word,会在ie里嵌入打开。
      

  17.   

    今天终于做出来了,方法:在servlet里面用response.sendRedirect(redirectPath);就可以直接弹出下载框了!!!