怎么实现大容量的文件或者图片实现在数据中的保存,除了smartupload方法外

解决方案 »

  1.   

    大容量的图片或文件上传的话,要用到nio包的管道流。利用了缓存。
    这样就可以实现大容量的数据上传,不过速度问题有待解决
      

  2.   

    用fileupload.jar进行上传,它可以上传大文件.以下为方法:DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象
    dff.setRepository(tmpDir);//指定上传文件的临时目录
    dff.setSizeThreshold(10*1024*1024);//指定在内存中缓存数据大小,单位为byte
    ServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象
    sfu.setFileSizeMax(500*1024*1024);//指定单个上传文件的最大尺寸
    sfu.setSizeMax(    500*1024*1024);//指定一次上传多个文件的总尺寸  
    String fileName =null;
    String title =null;
           
    FileItemIterator fii = sfu.getItemIterator(request);
    while(fii.hasNext()){        
    FileItemStream fis = fii.next();//从集合中获得一个文件流
    BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流
    if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域
    String Name=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
    fileName = Name+fis.getName().substring(fis.getName().lastIndexOf("."));//获得上传文件的文件名
                                     
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+"\\"+fileName)));//获得文件输出流
     Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹               
     }else{//其他表单(名为txt_title的text)它的值
    int readbyte;
    String value="";
    while((readbyte=in.read())!=-1){
    value=value+String.valueOf((char)readbyte);
    }                   
    if("txt_title".equals(fis.getFieldName())){
    title=new String(value.getBytes("iso8859_1"));
    }
                
             }
     }