Chinaunix首页 | 论坛 | 博客
  • 博客访问: 673214
  • 博文数量: 118
  • 博客积分: 2933
  • 博客等级: 少校
  • 技术积分: 1779
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-27 10:16
文章存档

2013年(35)

2012年(27)

2011年(23)

2010年(33)

分类: 系统运维

2012-05-26 20:50:08

1 文件上传
 
   Action层方法
   /**
     * 文件上传的action
     * @return
     */
 public String update() {
  try {
   this.initBase(); // 初始化
   // 防止重复更新
   if (request.getParameter("struts.token").equals(
     request.getSession().getAttribute("struts.token"))) {
    String objId = this.utilBean.getObjId();
    // 用户ID
    Long eid = this.userBean.getEid();
    /** 设定上传图片 */
    if (this.detailBean != null) {
     File file = this.detailBean.getFile(); // 上传文件
     File dir1 = new File("C:\\uploadEmp");
     // 如果该目录不存在,就创建s
     if (!dir1.exists()) {
      dir1.mkdirs();
     }
//      File dir = new File(dir1, "学员反馈");
//      if (!dir.exists()) {
//       dir.mkdirs();
//      }
      InputStream is = new FileInputStream(file);// 通过打开一个到实际文件的连接来创建一个
                 // FileInputStream,该文件通过文件系统中的
                 // File 对象
                 // file 指定
      detailBean.setSize(Long.valueOf(is.available()));
      
      if(detailBean.getSize()> 1024*1024*5){   //大于5M时
       this.utilBean.setMessage(this.getText("err.public.file.size"));
       return this.list();
      }
      
      OutputStream os = new FileOutputStream(new File(dir1,detailBean.getFileName()));
      // 根据dir路径名称字符串和name路径名称字符串去创建一个新的file实例
      byte[] buf = new byte[1024];
      int len = -1;
      while ((len = is.read(buf)) != -1) {
       os.write(buf, 0, len);
      }
      is.close();
      os.close();
      detailBean.setUrl("C:\\uploadEmp");
      Venderupload vender = venderuploadTask.detail2model(detailBean);
      venderuploadTask.savevender(vender);
       // 入库成功Message
                     this.utilBean.setMessage(this.getText("msg.submit.success"));
         this.list();
      
    }
   }
   return "update";
  } catch (Exception e) {
   logger.error(StackTraceUtil.getStackTrace(e));
  } finally {
  }
  return ERROR;
 }
 
 
 
重点:bean层必须有
    private File file; // 图片文件
    private String fileContentType; // 文件类型,必须是File定义的file……
    private String fileName; // 文件名称//重点此出的set方法不是自动生成的注意看
 
   而且fileName的set方法不能生成,必须是以下格式,其他字段可自动生成,否则action层会一直报找不到filename
     public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public void setFileFileName(String fileName) {
        this.fileName = fileName;
    }
   
 
2 jsp页面form的配置鼻血家后面的属性
 
enctype="multipart/form-data">
 
        
            附件:
           

            *(上传不得大于5M) 
 
          
              
 
    如上所示,上传文件的源码。
 
 
二 下载文件的源码:
 
   Action 层方法:
  
  /**
     * 文件流输出
     *
     * @return
     */
    public InputStream getDownloadFile() {
        try {
           
            // 文件的详细信息
            Venderupload vend=  venderuploadTask.findById(Long.valueOf(user_id));
            String url = vend.getUrl();
            String filename=vend.getFileName();
          //  String filename=URLEncoder.encode(publicfile.getFileName(), "UTF-8");
            String downUrl= url+";
            File file = new File(downUrl);
            InputStream stream = new FileInputStream(file);
            return stream;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
        return null;
    }
此处页面必须传给变量filename,如下:

     ','','')">下载
 
 
js代码:
 
function doview(id, filename) {
 document.getElementById("frm").action = "<%=path%>/course/venderuploaddownload.do?user_id="+     id + "&fileName=" + filename ; //?传参数
 document.getElementById("frm").submit();
 return true;
}
 
注意下载的重点是struts配置文件必须如下配置不能变动:
 
  
    ${fileType}
    attachment;filename="${fileName}"
    downloadFile
   
 
 
补充一点自己写的上传大小的限制为5M,
必须在中文,和txt中配置如下:
 
property配置:
1 err.public.file.size=\u4E0A\u4F20\u6587\u4EF6\u4E0D\u80FD\u5927\u4E8E5M!
txt配置:
2  err.public.file.size=上传文件不能大于5M!
 
 
 
 
 
 
  
 
  
阅读(3778) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~