public class MailDownloadAction extends ActionSupport {
private long id;
private MailDAO mdao;
private String downFile;
public String getDownFile() {
return downFile;
}
public void setId(long id) {
this.id = id;
}
public void setMdao(MailDAO mdao) {
this.mdao = mdao;
}
// 下载 获取输入流
public InputStream getDownloadFile() {
System.out.println("/uploads"+"/"+this.getDownFile());
return ServletActionContext.getServletContext().getResourceAsStream(
"/uploads"+"/"+this.getDownFile());
}
@Override
public String execute() throws Exception {
this.downFile=this.mdao.getMailById(this.id).getFilepath();
return SUCCESS;
}
}
<!-- 下载 -->
<action name="mailDownload*" class="mailDownloadAction" >
<param name="id">{1}</param>
<result name="success" type="stream">
<param name="contentType">application/zip,application/xml,application/vnd.ms-excel,video/x-ms-wmv,audio/x-wav,text/plain,
application/x-shockwave-flash,application/vnd.ms-powerpoint,application/pdf,video/mpeg,video/mp4,audio/mpeg,image/jpeg,
text/plain,application/java-archive,image/x-icon,text/html,image/gif,application/msword,image/bmp
</param>
<param name="contentDisposition">filename="${downFile}"</param>
<param name="inputName">downloadFile</param>
</result>
</action>
8 个解决方案
#1
不懂,帮顶==打破零回复!呵呵!
#2
弹出下载框是浏览器行为。你不需要处理这些。
#3
您的意思是 跟浏览器版本有关系了。?
#4
我写过的这种,是弹出提示框的,仅供参考!
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close(); // 清空response
resp.reset(); // 设置response的Header
resp.setCharacterEncoding("UTF-8");
resp.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename ,"UTF-8"));
resp.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(resp.getOutputStream());
resp.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
#5
换一个角度思考一下。如果浏览器不弹出提示框,那么你怎么知道用户要将文件保存到什么路径下?
#6
这是浏览器的问题吧。。可以设置是否弹出的。。
#7
怎么设置?
#8
你可以换几种浏览器测试下的,如果其他都能弹出框,那就是浏览器设置问题。
#1
不懂,帮顶==打破零回复!呵呵!
#2
弹出下载框是浏览器行为。你不需要处理这些。
#3
您的意思是 跟浏览器版本有关系了。?
#4
我写过的这种,是弹出提示框的,仅供参考!
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close(); // 清空response
resp.reset(); // 设置response的Header
resp.setCharacterEncoding("UTF-8");
resp.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename ,"UTF-8"));
resp.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(resp.getOutputStream());
resp.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
#5
换一个角度思考一下。如果浏览器不弹出提示框,那么你怎么知道用户要将文件保存到什么路径下?
#6
这是浏览器的问题吧。。可以设置是否弹出的。。
#7
怎么设置?
#8
你可以换几种浏览器测试下的,如果其他都能弹出框,那就是浏览器设置问题。