下载附件

其中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;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值