我自己用了一个简单的页面:
<body>
    <form id="form1" name="form1" enctype="multipart/form-data" method="post" action="upload.action">  
        文件标题: <input type="text" name="title"><br/> 
        选择文件:<input type="file" name="upload"><br/>
       <input type="submit"  value="上传">
       <a href="down/Struts2_maximunSize.txt" >下载</a>
    </form> 
 </body>
其中:<a href="down/Struts2_maximunSize.txt" >下载</a>
    为下载链接。
发现一个现象,图片格式和txt格式的文件不会出现下载框提示,也不会下载到本地,只能在页面浏览。只有*.exe才能出现下载提示框能下载。这是为什么?   
java 下载是不是仅靠 <a>标签就能完成呢?

解决方案 »

  1.   

    一般来说,上传的时候上传到了项目里的一个文件夹里,直接用<a>,给href一个路径就可以。如果上传的时候上传到了项目外面,例如上传到了D://upload目录地下,就得用流实现了吧
      

  2.   

    不能直接下载的,要把文件流放到response里去ByteArrayOutputStream baos = FileUpDownUtil.castToBAOStream(object);
    response.setContentType(contentType);
    response.setHeader("Content-Disposition", "attachment; filename="
    + new String(fileName.getBytes("GBK"), "ISO8859_1"));
    ServletOutputStream out = response.getOutputStream();
    baos.writeTo(out);
    out.flush();其中Objcet是你的文件流public static ByteArrayOutputStream downloadFileEx(String filePathAndName) throws IOException
     {
    File file = new File(filePathAndName);
    if (!file.exists())
    throw new NullPointerException("指定文件" + filePathAndName + "不存在"); FileInputStream fis = new FileInputStream(filePathAndName);
    BufferedInputStream bis = new BufferedInputStream(fis);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    BufferedOutputStream bos = new BufferedOutputStream(baos);
    int i;
    while ((i = bis.read()) != -1) {
    bos.write(i);
    }
    bos.flush(); // 提交文件流,很关键
    bis.close();
    return baos;
    }
      

  3.   

    你这个现象是正常的:因为现在的浏览器都比较智能,如果浏览器认为它能处理这种格式的数据,就会直接显示它。
      比如:html,txt,gif,甚至 flv 和 pdf 等。
    而对于它不认识的,就会提示进行下载。
    如果希望浏览器强制弹出下载提示,那么就需要借助Servlet来提供下载,并且在Head信息中,说明该数据格式是下载数据,比如:
      response.setContentType("application/x-msdownload");
      response.setContentType("application/octet-stream");
    具体做法,可以Google下的。
      

  4.   

    3楼强大,但是不知道1.2楼说的正确么  下载必须要用action或者serlvet处理么
      

  5.   


    出现下载提示框,是浏览器提供的。我说了:当浏览器不能直接处理你所指定的资源,比如:
      <a href="http://...../xxoo.avi">
    它就会自动弹出下载提示框,问你是否要下载。
    1、2楼说的也是对的。
    你的问题是:你想下载 txt 文件,而txt文件是浏览器所能直接处理的,所以它就很聪明的不会弹出下载提示框。那么两种招数:
    1、把txt文件压缩掉,浏览器就不认识了;或者把txt文件名修改为:rtf 或其他啥的,反正浏览器不认识就行;
    2、自己编写Servlet提供此类资源的访问,就是为了欺骗浏览器,告诉它:这个文件格式你肯定不认识、你肯定不认识、你肯定不认识、你肯定不认识、你肯定不认识