传智播客---文件上传下载系统

一。导入工程所需要的包

二。建web工程

   n层框架的的包名dao.daoimpl .service.seriveimpl.servlet.serlvetimpl.controller.utils.exception.

三。建数据库

四。先设计工具类的包。utils

 

      1.JdbcUtil 

        1)   用c3p0连接池获取dataSource

        private static CombopooledDataSource ds =null;

        static{

              ds=new CombopooledDataSource();

        };

        public static DataSource getDataSource()

        {

             return ds;  

         }

        2)   Daofactory泛型工厂(单例模式)

          private Daofactory(){};

          private static  Daofactory instance = new Daofactory();

          public static Daofactory getDao()

          {

                return instance; 

          }

          public static <T> T createdao(String classname,Class<T> type)

      {

             return (T) class.forname(classname).newInstance;

        }

 

 

五.    设计Dao

        upfileDao

public void add()

{

   QueryRunner runner = new QueryRunner(jdbcUtils.getDataSource);

   String sql ="";

   Object param[] ={"","","",""......};

   runner.update(sql,param);

  

}

public Upfile find(String id)

{

   QueryRunner runner = new QueryRunner(jdbcUtils.getDataSource);

   String sql ="select * from upfile where id = ?";

   runner.query(sql,id,new BeanHandler(Upfile.class));

}

 public List<Upfile> getAll()

{

  QueryRunner runner = new QueryRunner(jdbcUtils.getDataSource);

  String sql ="select * from upfile";

   return  (List<upfile>) runner.query(sql,new BeanListHandler(Upfile.class));

 

六. 设计service

     BusnessService

 

    private UpfileDao dao = Daofactory.getInstance().createDao("类路径",接口名.class)

    public void add(Upfile file)

    {

        dao.add(file); 

    }

    public Upfile find (String id)

    {

        dao.find(id);

    }

七。设计serlvet

     uploadServlet

     doPost()

 {

    DiskFileItemFactory factory = new DiskFileItemFactory();

    ServletFileUpload  upload = new ServletFileUpload(facotory);

   

 

}

 

     listfileServlet

     downloadServlet

八.设计web

     list.jsp

     upload.jsp

 

注意的八大项

 

  1.如何设置上传文件最大值,并实现超出最大值时给用户一个友好提示
 upload.setFileSizeMax(1024*10);  //设置最大值
 实现超出最大值时给用户一个友好提示:在程序中捕获FileUploadBase.FileSizeLimitExceededException
 只要程序抛出这个异常,代表用户上传的文件超出最大值
 
 
2.上传过程中的乱码问题
 2.1 普通输入项的乱码
  item.getString("码表 ")
 2.2 上传文件名的乱码
  ServletFileUpload.setHeaderEncoding("码表")
  
3.上传文件的安全性问题
 为防止用户直接上传文件,危害服务器安全,程序应禁止用户直接访问上传文件(即把上传文件保存在用户无法直接访问的目录)
  
4.防止文件覆盖(UUID)

5.文件打散存储(一个目录下面不能存超出1000个文件)
 用hash算法生成目录保存
 
6.设置监听器,监听文件上传进度
 upload.setProgressListener(new ProgressListener(){
   public void update(long arg0, long arg1, int arg2) {
    System.out.println("当前已上传" + arg0 + ",当前处理的文件总大小" + arg1);
   }
  });

7.临时文件的删除问题
 处理完每一个文件上传后,一定要记得调用Fileitem.delete方法,删除临时文件
 
8.限定上传文件类型
 判断上传文件后缀名
 

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值