服务器文件上传总结四种方法
方法一:使用servlet实现,这种方法很基本。
实现:通过简单的配置web.xml文件,形成一个web访问体系,使用了 org.apache.commons.fileupload文件上传类,实现HttpServlet接口中的三个方法,其中doPost()方法由自己去实现,定义基本参数:如:上传的格式,大小,文件上传路径,和一些错误提示输出信息等等。这个方法很好实现,不过缺点是,文件行数很大,大量的代码在一个类里面(其实可是试试将实现步骤用一个个的类/方法去实现,但这也花了一些时间,我很少会那样去做),整体布局不是很好看,再加上注释,呵呵,整个程序就像绣花一样了,我不大喜欢这种。项目部署:在程序里面定义上传路径,一般这种路径和项目部署的位置在同一台服务器上面。文件也同时上传到这台服务器相应的文件夹里面。
方法二:使用经典的struts2框架来做,使用它自己封装好的fileupload类
使用这种方法除了要配置web.xml文件以外,还需要配置struts.xml文件,这种方法很友好,因为毕竟是框架,所有整体程序有条不紊,后续修改也很好实现。页面显示使用的是jsp。这种方法我比较喜欢。项目部署:文件要上传到哪台服务器,项目就要部署到那台服务器,从这点出发,它就变得不太友好了。如果是向多台服务器上传文件,那就麻烦了,项目就要部署到多台服务器里面,同时项目之间有很大的耦合性,很繁琐,稍有问题,程序就出问题了,文件就会上传不到位,或者失败。这样是很不好的。但是还请相信的是,如果是一台服务器需要上传文件,那么这种方法是很不错的选择^_^。
方法三:框架一致,同样是struts2,但上传不在使用fileUpload类,采用ftp工具类
这种方法就不想上面第二种方法那么笨拙了,这种方法很简单,需要一些基本的参数:
fu.connectServer(“ip”, port, “username”, “password”, “上传路径”);
使用到commons-net-3.3-src.jar包。特点:第一,这种方法需要linux服务器配置好了ftp服务器才可以使用这个类,所有在使用的时候,一定要看看服务器是不是配置了ftp服务。第二,在使用的时候很容易忽略的一点是不知道ftp服务器使用的是不是通常用的21端口,通常这个端口是可以修改的,例如修改为2121端口等等,我在做文件远程上传的使用,使用了connectServer这种方法,把我折腾了很久,一直连不上,最后发现部分不服务器的这个端口是没有打开的,最后文件上传成功了,很惭愧。所有大家在使用的时候就一定要注意了。这种方法我最后没有使用,为啥,ftp开21端口很不安全,这样方法就最好不要使用了。方法的优点:能够上传文件到装有ftp服务器的任意一个可以访问的远程linux服务器,相对上面两种方法,它是不错的。呵呵
方法四:依旧使用struts2框架,工具类大变身,改用IBM提出,并由微软重大改进后产出而出的SMB。它能被用于Warp连接和客户端与服务器之间的信息沟通。服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件、打印机、串口等。SMB 协议可以用在因特网的TCP/IP协议之上,也可以用在其它网络协议如IPX和NetBEUI 之上。
不在介绍了,这些网上有,呵呵。
下面来说说这个类的威力,优点:能够使用很简单的代码实现想连接的任意服务器共享文件,当然它有前提,连接的服务器有这个共享文件,且共享文件外界任意访问(需要用户名和密码等等)。使用到的包为:jcifs-1.3.17.jar。可以实现文件读取,文件修改,下载文件,上传文件等等,在它的方法上,很多和file类很像,唯一的变化时在file相同功能方法的名字前面加上了smb字样,这很好让人理解。
上传文件路径:remoteUrl.add(“smb://用户名:密码@ip/要上传到服务器的地址”);
文件删除:new SmbNamedPipe(“smb://用户名:密码@服务器ip,SmbNamedPipe.PIPE_TYPE_RDWR).delete();
看文件是读取:new SmbFile(“smb://用户名:密码@服务器ip/文件的位置);