就把这个附件,就把附件按照一定规则传到另外一台服务器上。现在打算用户提交的时候,将文件通过ftp传到另外一台服务器上。
但是有两个担心啊不知道是否多余啊1、ftp传的时候有没有跟数据库连接一样的概念啊。是建立一个长ftp链接?还是每次都重新握手然后ftp文件啊。
2、在并发传文件的情况下。ftp是否有线程安全,或者等待的问题啊(就是等一个发完了另外一个才能开始发)?麻烦大家了啊!有人有现成的例子吗?thx

解决方案 »

  1.   

    参考apache的common包里FtpClient API,可以满足你的需求了多线程FTP上传是你自己控制的,FtpClient API只负责一个ftp登录的上传下载过程,你要开多个线程,写一个Runable实现里面调FtpClient的API即可记得以前做项目的时候封装过FtpClient的工具类,楼主要的话给你找一找QQ:121102723
      

  2.   


    谢谢啊~~~~~~~~我想知道并发的时候,如果并发传两个文件的话,共用一个ftp用户、密码,上传没问题吧?
    会出现排队或者线程或者其他什么问题吗?
      

  3.   

    为解决被传的Ftp服务器宕机的问题,我想在每次做上传的时候,除了上传当前的附件内容,还把存储附件的临目录里的文件全都上传上去,但是我担心发生并发以后临时目录里面的文件被上传两次。
    比如场景是:FTP服务器宕机,本来是帖子有附件就传到FTP服务器上,宕机就传失败,文件就保留在了当前服务器FTP临时目录下了,然后等FTP服务器正常了以后,如果有两个用户同时都上传带附件的帖子,我的逻辑是,先会将临时目录文件都上传。然后在上传这个附件。出现并发可能造成上传两次临时目录,或者还有其他的问题,不知道怎么解决比较好啊。55
      

  4.   

    FTP服务器宕机的话调用FtpClient的API时会Socket异常,你只需写好try-catch即可没有必要每次开一个ftp上传线程时都去传临时目录的文件,写一个定时线程定期扫描临时目录,发现有未传完的文件即上传即可
      

  5.   

    那如果我定时扫描那个目录,把目录下内容都上传。
    比如说我要在根目录是RootDir目录下创建我的文件。 
    我的java程序在RootDir下生成文件RootDir/dir1/dir2/file1。但是目录dir1/dir2都是没有的。所以我需要先创建这两个目录,然后在创建文件file1。那如果我在刚创建好dir1/dir2的时候,这个扫描的线程刚好到了定时的时间,就把rootDir下的内容全部移动(剪切)到另外一台服务器上了。那我java即将要创建的文件file1会不会就失败了? 
    那这种情况怎么办呢?
      

  6.   

    楼主 可以这样:先把文件上传到数据库,成功之后,再把文件通过FTP发送。简单的思路 仅供参考。
      

  7.   


    你说的这个涉及到子目录拷贝了,如果想避免这种情况下的文件覆盖,最好调用服务器的tar命令打包整个RootDir目录,然后FTP上传到远程再解tar,这样不会出现文件丢失。JDK里面Runtime.exec()可以运行Unix命令,当然你首先得有那台机器上相应目录的操作权限