1、struts2实现预览
action中代码:
private String downloadFileName;
public InputStream getDownloadFile() throws Exception
{
Map<String,String[]> param = super.getParameter();
String imageFileId = ((String[])param.get("fileId"))[0];
Integer fileId = new Integer( imageFileId );
//根据fileId去库中查询文件名称
String filename = activityService.getImageFileName(fileId).getImageFile();
downloadFileName = filename;
this.setDownloadFileName(downloadFileName);
String fullPath = MisConst.IMAGE_FILE_PATH + "activity"+"/" + downloadFileName;
File file = new File( fullPath );
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return fis;
}
/**
* 下载附件
* @return
*/
public String download()
{
return SUCCESS;
}
?xml中配置:
<action name="download" class="activityAction" method="download">
<result name="success" type="stream">
<param name="contentType">application/octet-stream </param>
<param name="contentDisposition">filename=${downloadFileName}</param>
<param name="inputName">downloadFile</param>//downloadFile要和action中getDownloadFile() 方法名一致
</result>
</action>
?2、真正的下载
action:
/**
* 下载
* @return
* @throws Exception
*/
public String download() throws Exception{
FileInputStream in=null;
OutputStream out=null;
try{
String filename = ServletActionContext.getRequest().getParameter("filename");
filename = URLDecoder.decode(filename.trim(), "utf-8");
String filepath = ServletActionContext.getServletContext().getRealPath("\\upload\\takingFile")+"\\"+filename;
File file = new File(filepath);
byte[] buff = new byte[1024];
in = new FileInputStream(file);
HttpServletResponse response=ServletActionContext.getResponse();
response.reset();
out = response.getOutputStream();
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename=\"" + URLEncoder.encode(file.getName(), "utf-8")+"\"");
response.setHeader("Connection", "close");
while (true) {
int len = in.read(buff);
if (len != -1) {
out.write(buff, 0, len);
out.flush();
} else {
break;
}
}
}catch (Exception e) {
e.printStackTrace();
}finally{
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
}
return null;
}
?jsp:
function downLoad(filename){
var filename = filename;
var data="?filename="+encodeURI(encodeURI(filename));//注意两次转码,否则中文会乱码
var url ="download.action";
window.open(encodeURI(url)+data);
}
?
?