我自己用了一个简单的页面:
<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>标签就能完成呢?
<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>标签就能完成呢?
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;
}
比如:html,txt,gif,甚至 flv 和 pdf 等。
而对于它不认识的,就会提示进行下载。
如果希望浏览器强制弹出下载提示,那么就需要借助Servlet来提供下载,并且在Head信息中,说明该数据格式是下载数据,比如:
response.setContentType("application/x-msdownload");
response.setContentType("application/octet-stream");
具体做法,可以Google下的。
出现下载提示框,是浏览器提供的。我说了:当浏览器不能直接处理你所指定的资源,比如:
<a href="http://...../xxoo.avi">
它就会自动弹出下载提示框,问你是否要下载。
1、2楼说的也是对的。
你的问题是:你想下载 txt 文件,而txt文件是浏览器所能直接处理的,所以它就很聪明的不会弹出下载提示框。那么两种招数:
1、把txt文件压缩掉,浏览器就不认识了;或者把txt文件名修改为:rtf 或其他啥的,反正浏览器不认识就行;
2、自己编写Servlet提供此类资源的访问,就是为了欺骗浏览器,告诉它:这个文件格式你肯定不认识、你肯定不认识、你肯定不认识、你肯定不认识、你肯定不认识