开发者社区> 问答> 正文

jsp如何实现通过file控件将本地文件文件上传到ftp中?

如果使用ApacheFTPClient方式,要怎么做?麻烦说一下具体流程,如果有个示例最好了。
jsp要做什么修改?后台逻辑怎么实现?这两个怎么关联。
PS:现在做的是一个“注册信息”的界面,现在实现的是将相关信息填写完成后(file控件只是获取了本地文件的路径),通过点击下方的“保存” (submit)后, 利用表单的action="SaveServlet" 将数据保存到数据库
那么,能否在点击保存的同时,将注册信息中文件路径所指向的文件上传到FTP中呢?
求大神帮助。

展开
收起
蛮大人123 2016-03-25 16:21:46 3447 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    客户端:

    /*
     * 使用TCP协议写一个可以上传文件的服务器和客户端。
     * 
     * 客户端类
     * 
     * 运行完要F5刷新下项目
     */
    public class FTPClient
    {
        public static void main(String[] args) throws Exception
        {
            //链接服务器,127.0.0.1表示本机,5678为端口号
            Socket socket = new Socket("127.0.0.1", 5678);
            System.out.println("conneted server");
            
    
            //需要上传的文件路径,这里是当前这个java源文件
            String path = System.getProperty("user.dir")+File.separator+"src"+File.separator+"question10"
                    +File.separator+"FTPClient.java";
    
            //根据路径链接到本机文件系统
            File file = new File(path);
            
            //取得到服务器的输出流,用来写入数据
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            System.out.println("start write");
            writeHead(dos, file);
            writeFile(dos, file);
            System.out.println("write finished");
        }
        
        /**
         * 写传输头,这里只是文件名字
         */
        public static void writeHead(DataOutputStream dos, File file) throws IOException
        {
            dos.writeUTF(file.getName());
            dos.flush();
        }
        
        /**
         * 读取文件并传输给服务器
         */
        public static void writeFile(DataOutputStream dos, File file) throws IOException
        {
            DataInputStream dis = new DataInputStream(new FileInputStream(file));
            //超过两个G的文件会出问题,获取不到准确的大小
            //并且dis.available() > 0表达式也不能正确
            //工作
            dos.writeInt(dis.available());
            System.out.println("file size " + dis.available() + " bytes");
            while(dis.available() > 0)
            {
                dos.write(dis.read());
            }
            dos.flush();
        }
    }

    服务器

    /*
     * 使用TCP协议写一个可以上传文件的服务器和客户端。
     * 
     * 服务器类
     * 
     * 老师运行完要F5刷新下项目
     */
    public class FTPServer
    {
        public static void main(String[] args) throws Exception
        {
            //启动服务器,并监听5678端口的链接请求
            ServerSocket ss = new ServerSocket(5678);
            Socket client = ss.accept();
            System.out.println("client conneted");
            
            //建立到客户端的输入流,用以读取数据
            DataInputStream dis = new DataInputStream(client.getInputStream());
            //读取数据头,即文件名
            String fileName = readHead(dis);
            System.out.println("start read " + fileName);
            
            //服务器将要保存从客户端上传的文件的路径
            //这里是当前这个服务器java源文件的所在目录
            //传完F5刷新下项目
            String path = System.getProperty("user.dir")+File.separator+"src"+File.separator+"question10"
                    +File.separator;
            //给保存的文件加了点东西,要不就把这个客户端
            //那个java源文件给覆盖了,看不出来效果
            File file = new File(path + fileName.replace(".", "$1."));
            readFile(dis, file);
            System.out.println("read finished");
        }
        
        /**
         * 读取并返回数据头,也就是文件名字
         */
        public static String readHead(DataInputStream dis) throws IOException
        {
            return dis.readUTF();
        }
        
        /**
         * 读取客户端传来的文件数据并写入本地文件
         */
        public static void readFile(DataInputStream dis, File file) throws IOException
        {
            //取得文件大小
            int length = dis.readInt();
            //将文件数据写如本地文件
            DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
            //创建文件
            file.createNewFile();
            for (int i = 0; i < length; i++)
            {
                dos.write(dis.read());
            }
        }
    }
    2019-07-17 19:14:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关课程

更多

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载