日期:2014-05-17  浏览次数:20724 次

java web 下载文件怎么实现的?
我自己用了一个简单的页面:
<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>标签就能完成呢?

------解决方案--------------------
探讨
java 下载是不是仅靠 <a>标签就能完成呢?

------解决方案--------------------
不能直接下载的,要把文件流放到response里去
Java code

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();

------解决方案--------------------
你这个现象是正常的:

因为现在的浏览器都比较智能,如果浏览器认为它能处理这种格式的数据,就会直接显示它。
比如:html,txt,gif,甚至 flv 和 pdf 等。
而对于它不认识的,就会提示进行下载。


如果希望浏览器强制弹出下载提示,那么就需要借助Servlet来提供下载,并且在Head信息中,说明该数据格式是下载数据,比如:
response.setContentType("application/x-msdownload");
response.setContentType("application/octet-stream");
具体做法,可以Google下的。
------解决方案--------------------
探讨
不是 只要出现下载提示框就能 下载到本地了么? 这些工作是谁完成的?