<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    江湖的筆記

    積累比獲取更重要

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      6 隨筆 :: 1 文章 :: 0 評論 :: 0 Trackbacks
    最近項目需要用到上傳文件,找了個fileupload組件,寫了幾個類,記錄如下:
    1.上傳操作配置類
     1public class UpConfig {
     2    private long max_size=10*1024*1024;                       //最大上傳文件大小,默認10M
     3    private HttpServletRequest request;                            //請求體對象
     4    private String targetDir;                                            //下載目錄,相對路徑
     5    private String baseDir="";                                         //應用目錄
     6    private String tmpDir="/tmp";                                   //臨時文件目錄,默認為根目錄下的tmp目錄
     7    private int memBufSize=1024*10;                              //緩沖內存區大小,默認10k
     8    private List fileTypeList=new ArrayList();                    //允許 上傳文件類型
     9    private List fileList=new ArrayList();                           //返回文件列表
    10    private ProgressListener listener=null;                            //上傳進度對象,默認生成UpProgress類實例
    11
    12    public UpConfig(HttpServletRequest request){
    13        this.request=request;
    14        addFileType("txt");
    15        addFileType("rar");
    16    }

    17    
    18    public long getMaxSize() {
    19        return max_size;
    20    }

    21    public void setMaxSize(long size) {
    22        this.max_size = size;
    23    }

    24    public HttpServletRequest getRequest() {
    25        return request;
    26    }

    27    
    28    public String getTargetDir() {
    29        return getBase_dir()+targetDir;
    30    }

    31    public void setTargetDir(String dir) {
    32        this.targetDir =dir;
    33    }

    34    
    35    public String getBase_dir() {
    36        if("".equals(baseDir)&&request!=null){
    37            baseDir=request.getSession().getServletContext().getRealPath("/");
    38        }

    39        return baseDir;
    40    }

    41    
    42    public String getTmpDir() {
    43        return getBase_dir()+tmpDir;
    44    }

    45
    46    public int getMemBufSize() {
    47        return memBufSize;
    48    }

    49    public void setMemBufSize(int size) {
    50        this.memBufSize = size;
    51    }

    52    public List getFileTypeList() {
    53        return fileTypeList;
    54    }

    55    public void addFileType(String t) {
    56        if(!fileTypeList.contains(t)){
    57            fileTypeList.add(t);
    58        }

    59    }

    60    public void put(String f){
    61        if(!fileList.contains(f.trim())){
    62            fileList.add(f);
    63        }

    64    }

    65    /**
    66     * 獲取上傳文件路徑列表
    67     * @return
    68     */

    69    public List getFileList(){
    70        return fileList;
    71    }

    72    
    73    public ProgressListener getListener() {
    74        if(listener==null){
    75            listener=new UpProgress(request);
    76        }

    77        return listener;
    78    }

    79
    80    public void setListener(ProgressListener listener) {
    81        this.listener = listener;
    82    }
        
    83}

    2.上傳進度類,實際只是實現了一個接口的方法而已
     1public class UpProgress implements ProgressListener {
     2    private HttpSession session=null;
     3    
     4    public UpProgress(HttpServletRequest request){
     5        if(request!=null) session=request.getSession();
     6    }

     7    
     8    public void update(long bytesRead, long totalSize, int itemIndex) {
     9        if(session!=null){
    10//            System.err.print(System.currentTimeMillis()+"更新上傳進度\r\n");
    11            Map uploadMap=null;
    12            Object o=session.getAttribute("UploadMap");
    13            if(o==null){
    14                uploadMap=new HashMap();
    15            }
    else{
    16                uploadMap=(Map)o;
    17            }

    18            uploadMap.put("bytesRead",Long.toString(bytesRead));    //已上傳大小
    19            uploadMap.put("totalSize", Long.toString(totalSize));         //文件總大小
    20            uploadMap.put("itemIndex",Integer.toString(itemIndex));  //當前上傳文件序號
    21            session.setAttribute("UploadMap",uploadMap);                 
    22        }

    23    }

    24
    25}

    3.上傳操作類
     1public class Upload {
     2    
     3    /**
     4     * 處理上傳文件
     5     * @param request
     6     * @param config   上傳配置類,具體屬性參考UpConfig類
     7     * @throws HsException
     8     */

     9    public static void  dealUploadFile(UpConfig config) throws HsException{
    10        DiskFileItemFactory factory=new DiskFileItemFactory();
    11        factory.setSizeThreshold(config.getMemBufSize());
    12        File tmpFile=new File(config.getTmpDir());
    13        if(!tmpFile.exists()) tmpFile.mkdir();
    14        factory.setRepository(tmpFile);
    15        ServletFileUpload fup=new ServletFileUpload(factory);
    16        fup.setSizeMax(config.getMaxSize());
    17        fup.setProgressListener(config.getListener());
    18        try{
    19            List filelist=fup.parseRequest(config.getRequest());
    20            Iterator it=filelist.iterator();
    21            while(it.hasNext()){
    22                FileItem fileItem=(FileItem)it.next();
    23                if(fileItem==null||fileItem.isFormField()) continue;
    24                String fileName=fileItem.getName().substring(fileItem.getName().lastIndexOf("\\")+1);
    25                String ext=fileName.substring(fileName.lastIndexOf(".")+1);
    26                if(!config.getFileTypeList().contains(ext)){
    27                    throw new HsException("0001","不允許上傳"+ext+"格式的文件");
    28                }

    29                String t_dir=config.getTargetDir();
    30                File f=new File(t_dir);
    31                if(!f.exists()) f.mkdir();
    32                String f_name=t_dir+"/"+fileName.substring(0,fileName.lastIndexOf("."))+"_"+
    33                                    System.currentTimeMillis()+"."+ext;
    34                fileItem.write(new File(f_name));
    35                config.put(f_name);
    36            }

    37        }
    catch(Exception e){
    38            e.printStackTrace();
    39            if(e instanceof SizeLimitExceededException){
    40                throw new HsException("0001","文件大小超出范圍!");
    41            }
    else{
    42                throw new HsException("0001",e.toString());
    43            }
        
    44        }

    45    }

    46}

    調用upload類之后可以通過ajax動態獲取session中的上傳進度。現在使用還是比較粗淺,以后有時間好好研究一下。
    posted on 2009-01-10 01:15 江湖 閱讀(355) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 又黄又大的激情视频在线观看免费视频社区在线| 亚洲白色白色永久观看| 亚洲精品国产精品| 一个人在线观看视频免费| 亚洲高清免费在线观看| 免费国产污网站在线观看15| 亚洲一区二区三区高清| 5555在线播放免费播放| 亚洲国产美女精品久久| 91麻豆最新在线人成免费观看| 亚洲国产成人久久精品app| 67194熟妇在线永久免费观看 | 亚洲va国产va天堂va久久| 免费网站观看WWW在线观看| 亚洲成人在线电影| 国色精品卡一卡2卡3卡4卡免费| 亚洲综合校园春色| 四虎永久成人免费| 四虎一区二区成人免费影院网址| 久久久久国产亚洲AV麻豆| 成人免费一区二区三区| 97se亚洲综合在线| 成人黄18免费视频| 一级成人a免费视频| 亚洲色四在线视频观看| 18禁无遮挡无码网站免费| 免费看黄网站在线看| 亚洲AV无码专区在线播放中文 | 亚洲AV无码精品蜜桃| 哒哒哒免费视频观看在线www| 一级做性色a爰片久久毛片免费| 亚洲AV中文无码字幕色三| 成人毛片免费观看视频| 免费VA在线观看无码| 婷婷亚洲久悠悠色悠在线播放| 一个人免费观看www视频在线| 亚洲黄片手机免费观看| 亚洲成人在线免费观看| 亚洲黄黄黄网站在线观看| 久久久久久精品免费看SSS| 黄页视频在线观看免费|