TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
用http协议文件上传与用ftp上传文件2者的优缺点:
1:用http协议上传更适合web编程的方便;传小于1M文件速度要比用ftp协议上传文件略快。安全性好;不像ftp那样;必须要启动一个ftp服务才行。
2:用ftp协议上传文件大于1M的文件速度比http快;文件越大;上传的速度就比http上传快的倍数越大。而且用java编写程序;ftp比http方便。好,废话少说;我们先搭建一个实例来理性认识一下用java编写ftp上传文件的技术。 首先启动一个ftp服务,
ftp的用户:"zz3z2008"
密码:"zz3z208";
随后在ftp主目录下建一个名为upftp的子目录;就可启动这个例题了。 这个例子的运行图:
- [img]http://img.javaxxz.com/2014/10/28/235837796.jpg[/img]
- [img]http://img.javaxxz.com/2014/10/28/235837906.jpg[/img]
- 文件1:MainCtrl.java(servlet文件)内容如下:
- package ftp;
- 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("10.10.1.2", "zz3z2008", "zz3z2008", "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");
- os = ftpClient.put("MainCtrl.zip");
- 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 action="/ftp/testFtp" method="post">
<input name="file_name" size="38" type="text" value="C:\java\MainCtrl.zip" />
<input type="submit" />
</form>
</body>
</html>
源码下载:http://file.javaxxz.com/2014/10/28/235837984.zip |
|