其中jsp页面中只需定义type=”file“,name="proReCheckFile"
在Aciton中,需要定义
priate File proReCheckFIle;
private String proReCheckFileFileName;
jsp页面:
附件:<input type="file" name="proReCheckFile" style="width:250px;"/>
Action类:
public final static String DEVELOPMENTGUIDE_ERROR = "error";
private final static String FILE_UPLOAD_DIR;
private File proReCheckFile;
private String proReCheckFileFileName;
public File getProReCheckFile() {
return proReCheckFile;
}
public void setProReCheckFile(File proReCheckFile) {
this.proReCheckFile = proReCheckFile;
}
public String getProReCheckFileFileName() {
return proReCheckFileFileName;
}
public void setProReCheckFileFileName(String proReCheckFileFileName) {
this.proReCheckFileFileName = proReCheckFileFileName;
}
//下载附件
public String downloadProReCheckFile(){
String error = null;
CurrentRequirement cr = null;
String proReCheckFileName = null;
String savedProReCheckFileName = null;
String requirementID = request.getParameter("id");
HttpServletResponse response = ServletActionContext.getResponse();
InputStream is = null;
OutputStream os = null;
try{
cr = requirementService.getRequirementById(requirementID);
if(cr == null){
error = "复核文件不存在或已删除.";
log.error("数据库中未能找到requirementID为'" + requirementID + "'的复核文件");
request.setAttribute(DEVELOPMENTGUIDE_ERROR, error);
return "error_downloadReCheckFile";
}
proReCheckFileName = cr.getProReCheckFileName();
savedProReCheckFileName = cr.getSavedproReCheckFileName();
//指定具体操作的文件
File downloadFile = new File(FILE_UPLOAD_DIR,savedProReCheckFileName);
if(!downloadFile.exists()){
error = "文件不存在或已删除";
log.error("服务器存储目录下未能找到文件名称为:'"+
proReCheckFileName+"'的文件!");
request.setAttribute(DEVELOPMENTGUIDE_ERROR, error);
return "error_downloadReCheckFile";
}
response.setCharacterEncoding("UTF-8");
String responseFileName = null;
try {
// 解决下载提示框显示乱码问题
responseFileName = new String(proReCheckFileName.getBytes(), "ISO8859-1");
} catch (Exception e) {
log.info("对下载文件名转码时出现异常", e);
}
response.addHeader("Content-Disposition", "attachment;filename=" + responseFileName);
log.info("正在从服务器上下载文件:" + proReCheckFileName);
is = new FileInputStream(downloadFile);
os = response.getOutputStream();
int len;
byte[] buffer = new byte[1024];
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.flush();
}catch(Exception e){
log.error("下载文件时出现异常", e);
if (error == null)
error = "文件下载失败";
request.setAttribute(DEVELOPMENTGUIDE_ERROR, error);
return "error_downloadReCheckFile";
}finally{
try {
if (is != null)is.close();
if (os != null)os.close();
} catch (Exception e) {
log.error("关闭文件流失发生异常", e);
}
}
return null;
}