`
jacally
  • 浏览: 772507 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java实现的ftp文件上传例题

    博客分类:
  • JAVA
阅读更多


作者:怀念霍去病 文章来源:http://publishblog.blogchina.com/blog/tb.b?diaryID=5075985 上传日期:2006-10-03

 
前几天写过一编"关于java的http协议文件上传实用例题"的文章;今天还想写编关于java用ftp上传文件的内容。我来说说2者的优缺点;
1:用http协议上传更适合web编程的方便;传小于1M文件速度要比用ftp协议上传文件略快。安全性好;不像ftp那样;必须要启动一个ftp服务才行。

2:用ftp协议上传文件大于1M的文件速度比http快;文件越大;上传的速度就比http上传快的倍数越大。而且用java编写程序;ftp比http方便。好,废话少说;我们先搭建一个实例来理性认识一下用java编写ftp上传文件的技术。

首先在本机启动一个ftp服务,ftp的用户:"IUSR_ZJH" 密码:"123";随后在ftp主目录下建一个名为upftp的子目录;下面有4个文件就可启动这个例题了。

文件1:MainCtrl.java(servlet文件)内容如下:

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;

import java.io.FileInputStream;
import java.io.IOException;

import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;


public class MainCtrl extends HttpServlet {

private FtpClient ftpClient;

public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

resp.setContentType("text/html; charset=UTF-8");

try {
//连接ftp服务器
connectServer("127.0.0.1", "IUSR_ZJH", "123", "upftp");
//上传文件;并返回上传文件的信息
req.setAttribute("inf", upload(req.getParameter("file_name")));
} catch (Exception e) {
System.out.println(e.toString());
req.setAttribute("inf", e.toString());
req.getRequestDispatcher("view_inf.jsp").forward(req, resp);
return;
} finally {
if (ftpClient != null) {
ftpClient.closeServer();
}
}
req.getRequestDispatcher("view_inf.jsp").forward(req, resp);
}

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
//连接ftp服务器
private void connectServer(String server, String user, String password,
String path) throws IOException {
// server:FTP服务器的IP地址;user:登录FTP服务器的用户名
// password:登录FTP服务器的用户名的口令;path:FTP服务器上的路径
ftpClient = new FtpClient();
ftpClient.openServer(server);
ftpClient.login(user, password);
//path是ftp服务下主目录的子目录
if (path.length() != 0)
ftpClient.cd(path);
//用2进制上传
ftpClient.binary();
}

//上传文件;并返回上传文件的信息
private String upload(String filename) throws Exception {
TelnetOutputStream os = null;
FileInputStream is = null;
try {
//"upftpfile"用ftp上传后的新文件名
os = ftpClient.put("upftpfile");
java.io.File file_in = new java.io.File(filename);
if (file_in.length()==0) {
return "上传文件为空!";
}
is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
return "上传文件成功!";
}

}

文件2:upftp.htm(前台操作页面)内容如下:

<html><body> <form method="post" action="/upftp/MainCtrl"> <!-- C:\\Downloads\\setup_kubao.exe客户端真实文件路径 --> <input type="text" name="file_name" size="38" value="C:\\Downloads\\setup_kubao.exe" /> <input type="submit" /> </form></body> </html></body></html></HTML>

分享到:
评论
4 楼 bobor_2008 2010-07-08  
单用上面的页面去上传到FTP服务器上在项目部署本机当然是可以了,但其它的访问者就不可以了,因为路径的问题。真正的实现各客户端都可以上传到FTP服务器上要通过第三方组件把本地文件上传到服务器上,然后再服务器上传到目标FTP服务器上。

如果目标服务器和FTP服务器是同一台的话,这样就感觉有点线圈子。

支持LZ的共享。
3 楼 kwj 2008-07-02  
楼上问的好。
但服务器和客户端分开的时候,上传了就出现问题了。

郁闷。。
2 楼 jacally 2008-02-23  
客户端上传文件到服务器是通过文件流的方式上传到服务器端,客户端文件上传控件应该是<input type="file" name="file_name" value="C:\\Downloads\\setup_kubao.exe" />,这里可能是原文作者的笔误。
我参考该文档主要是借鉴了一下FTP组件的应用。
关于文件上传的功能实现一些MVC框架有完整的解决实例,比如Struct、webwork等,可以参考一下。
1 楼 octopusyu 2008-02-22  
你这样不行吧?
你的upftp.htm页面中传递的file_name是客户端的文件绝对路径,而你servlet是在服务器端执行的程序,当服务器和客户端不在同一台机器上的时候,怎么可以根据file_name而获取客户端的物理文件来执行ftp上传呢?
等待回答ing.....

相关推荐

    Java实现FTP文件上传和下载

    以下将详细介绍如何使用Java实现FTP文件上传和下载的步骤,以及涉及到的关键知识点。 首先,Java通过`java.net`和`javax.net`包提供了FTP功能,但这些原生API并不易用。因此,大多数开发人员会使用第三方库如Apache...

    java实现ftp自动上传文件

    Java 实现 FTP 自动上传文件是一项常见的任务,尤其在自动化部署、数据同步或者日志传输等场景中。本文将深入探讨如何使用Java编程语言来构建一个FTP文件上传系统,同时结合Log4j日志框架和命令行信息的处理。 首先...

    java实现的ftp文件上传

    首先,我们来看标题和描述中的关键词"java实现的ftp文件上传",这表明我们要讨论的是使用Java编程语言来实现在FTP服务器上上传文件的过程。Java提供了一个名为`java.net.Socket`的基本网络连接类,但直接使用它来...

    用JAVA实现Ftp文件上传下载

    在`TestFtpUpload`文件中,可以编写单元测试或集成测试来验证FTP上传和下载功能。例如,你可以创建一个测试类`FtpOperationsTest`,包含如下方法: ```java import org.junit.jupiter.api.Test; import org.apache....

    Java实现FTP批量大文件上传下载.pdf

    Java实现FTP批量大文件上传下载 一、Java FTP客户端库的选择 在选择Java FTP客户端库时,需要考虑多个因素,例如性能、安全性、可靠性等。当前有多种FTP客户端库可供选择,例如J-FTP、SimpleFTP、FTPClient等。每...

    Java实现FTP批量大文件上传下载

    Java 实现 FTP 批量大文件上传下载 本文介绍了如何使用 Java 实现 FTP 服务器上的大批量文件的上传和下载,处理大文件的上传和下载。通过 Java 现有的可用的库来编写 FTP 客户端代码,并开发成 Applet 控件,做成...

    java实现ftp上传jar包

    以上就是关于"java实现ftp上传jar包"的相关知识点,涵盖了FTP协议、相关库的使用、JAR文件的处理以及基本的Java FTP操作。在实际项目中,你可能还需要考虑其他因素,如连接超时、重试策略、文件权限管理等。

    java实现文件上传到ftp

    本教程将详细介绍如何使用Java实现文件上传到FTP服务器,这适用于初学者熟悉FTP客户端编程的基础概念。 首先,我们要了解FTP的基本工作原理。FTP允许客户端连接到服务器,发送文件,接收文件,或者列出服务器上的...

    java实现ftp文件传输

    Java实现FTP文件传输涉及到多个关键知识点,包括FTP协议的基本概念、Java中的FTP客户端库、以及如何使用Java进行文件操作。以下是对这些知识点的详细说明: 1. FTP协议:FTP(File Transfer Protocol)是一种用于在...

    java实现的远程ftp文件浏览

    PutButton部分为向FTP服务器上传一个文件。 别忘了在程序中还要引入两个库文件(import sun.net.*,import sun.net.ftp.*)。 以下是这三部分的JAVA源程序: (1)显示FTP服务器上的文件 void ftpList_actionPerformed...

    JAVA实现FTP协议文件上传

    在JAVA中实现FTP协议文件上传,我们需要使用Java的`java.net`和`org.apache.commons.net.ftp`这两个库。`java.net`是Java自带的网络编程库,而`org.apache.commons.net.ftp`则是Apache Commons Net提供的FTP客户端库...

    java实现ftp文件上传及下载源码

    综上所述,这个资源包提供了一个完整的Java FTP客户端实现,包括连接服务器、上传和下载文件的功能,并且包含了日志处理和测试支持。开发者可以借此学习和理解如何在Java中实现FTP操作,也可以直接在自己的项目中...

    JAVA获取FTP文件列表

    ### JAVA获取FTP文件列表知识点详解 #### 一、概述 ...通过这些接口,开发者可以轻松地实现文件的上传、下载、删除以及目录的管理等功能。此外,还需要注意错误处理和异常捕获,以确保程序的健壮性和可靠性。

    Java实现ftp文件传输

    本篇文章将深入探讨如何使用Java实现FTP文件传输,包括客户端和服务端的构建。 首先,我们需要理解FTP的基本工作原理。FTP基于TCP/IP协议,通过建立两个独立的连接来完成文件传输:控制连接用于发送命令和接收响应...

    java编写的ftp文件实时监控下载上传

    用java语言编写的ftp小工具,可以按指定时间监控ftp服务器,把服务器指定目录内新产生的文件或者文件夹下载到本地指定文件夹,下载后删除数据。 也可以监控本地文件夹,把文件夹内新产生的文件或者文件夹整体上传到...

    用Java实现FTP批量大文件上传下载

    Java,FTP,用Java实现FTP批量大文件上传下载

    java实现Ftp批量下载文件及解压

    通过Java实现FTP批量下载文件以及解压的功能,可以极大地提高工作效率,特别是在处理大量数据时。以下是一份详细的步骤介绍: 首先,我们需要引入Java的FTP客户端库,如Apache Commons Net库。这个库提供了丰富的...

Global site tag (gtag.js) - Google Analytics