0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
阅读:1018回复:15

[求救]从FTP服务器下载文件怎么实现?

楼主#
更多 发布于:2005-08-02 08:51
情况是这样的:

一个下载系统,所有的文件都存放在FTP服务器上,用户从WEB页访问(和大多数下载网站一样)
用户点击WEB页的下载链接,即可以下载文件。但是,不能让客户端得到FTP服务器的用户名和密码。
怎么实现?

应该有实现了的,平时在下载东西的时候好像见过那种。在 FLASH GET 里日志能看到
.......
......
重新定向到:....
开始FTP处理...
....
....
开始接收数据

好像是是这么个过程
具体怎么实现的?

jsp servlet javabean....
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
lijiannan_1981
著名写手
著名写手
  • 铜币15枚
  • 威望0点
  • 贡献值0点
1C#
发布于:2005-08-02 09:17
Re:[求救]从FTP服务器下载文件怎么实现?
要不就试着写一个处理http请求的servlet来配合j-smart使用不知道行不行

ps:oooo,这个问题是挺郁闷的哈,我们龙老大明天回来再行解决的方法
无。
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
2C#
发布于:2005-08-02 14:31
Re:[求救]从FTP服务器下载文件怎么实现?
绝望地呼喊~~就没有人做过下载么?。。。
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
suchasplus
作家
作家
  • 铜币16枚
  • 威望11点
  • 贡献值1点
3C#
发布于:2005-08-02 15:45
Re:[求救]从FTP服务器下载文件怎么实现?
帮顶
等解决方案 [ 2005-08-02 17:29:54 suchasplus 修改 ]
The history of these days will be written in blood... By crushing the armies of our enemy, by seizing the weapons they thought to turn against us, we were fighting for our very existence!
apache
知名人士
知名人士
  • 铜币0枚
  • 威望0点
  • 贡献值0点
4C#
发布于:2005-08-02 15:57
Re:[求救]从FTP服务器下载文件怎么实现?
作一个sql查询,然后把查出来的值赋给~~赋给~~赋给~~40自己想


哥们,写出代码来看看 [ 2005-08-02 16:24:12 apache 修改 ]
【超级无敌烦躁症患者】
suchasplus
作家
作家
  • 铜币16枚
  • 威望11点
  • 贡献值1点
5C#
发布于:2005-08-02 16:24
Re:[求救]从FTP服务器下载文件怎么实现?

去你妈得吧

请问我有那里得罪您么?

我又不了解java api,但是不就像您所说的,道理都是相通的,思路不行么 [ 2005-08-02 16:26:07 suchasplus 修改 ]
The history of these days will be written in blood... By crushing the armies of our enemy, by seizing the weapons they thought to turn against us, we were fighting for our very existence!
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
6C#
发布于:2005-08-03 09:08
Re:[求救]从FTP服务器下载文件怎么实现?
不用寫,提供思路也行啊~~~
值給誰啊。。生成 ftp://user:psw@domain/ 再轉向?不行。
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
lijiannan_1981
著名写手
著名写手
  • 铜币15枚
  • 威望0点
  • 贡献值0点
7C#
发布于:2005-08-03 14:06
Re:[求救]从FTP服务器下载文件怎么实现?
download.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>下载</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<a href="jsp/do_download.jsp">点击下载</a>
</body>
</html>


do_download.jsp

<%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %>
<%SmartUpload su = new SmartUpload();//new 一个实例
     su.initialize(pageContext);
     su.setContentDisposition(null);
     su.downloadFile("/upload/???.???");//文件目录级文件名
%>
    
PS:0000老兄,我道行还浅,只能帮你这么多了,你再试试,实在要是再不行得话,只能等我们long老大回来再说了赫赫
无。
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
8C#
发布于:2005-08-03 15:55
Re:[求救]从FTP服务器下载文件怎么实现?
樓上的。。。。問題在於怎麽來登錄。。。
smartupload不能傳入 url 參數~~
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
9C#
发布于:2005-08-03 15:56
Re:[求救]从FTP服务器下载文件怎么实现?
Smartupload我試過了~~
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
10C#
发布于:2005-08-07 20:46
Re:[求救]从FTP服务器下载文件怎么实现?
还没解决,上次松松提了个办法,但是断点续传有问题吗?
而且限制了平台,只能在 LINUX ~
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
北京小妞
著名写手
著名写手
  • 铜币0枚
  • 威望0点
  • 贡献值0点
11C#
发布于:2005-08-07 20:57
Re:[求救]从FTP服务器下载文件怎么实现?
吐了
[b] [color=#ff0036]Every breath you take Every move you make Every bond you break Every step you take I'll be watching you Every single day Every word you say Every game you play Every night you say I'll be watching you O can't you see You belong to me How my poor heart aches With every step you take Every move you make Every vow you break Every smile you fake Every claim you stake I'll be watching you[/color] [/b]
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
12C#
发布于:2005-08-07 21:02
Re:[求救]从FTP服务器下载文件怎么实现?
SmartUpload 的 downloadFile 方法的主要代码如下:
public void downloadFile(String s, String s1, String s2, int i)
throws ServletException, IOException, SmartUploadException
{
/*
.......检测....
*/

/* 
m_application 是 ServletContext 对象
getRealPath
public String getRealPath(String path);
一个符合URL路径格式的指定的虚拟路径的格式是:/dir/dir/filename.ext。用这个方法,可以返回与一个符合该格式的虚拟路径相对应的真实路径的String。这个真实路径的格式应该适合于运行这个Servlet引擎的计算机(包括其相应的路径解析器)。
不管是什么原因,如果这一从虚拟路径转换成实际路径的过程不能执行,该方法将会返回一个空值。
*/
s = m_application.getRealPath(s);
/*
根据上面得到实际路径创建 File 类型对象
如果我是要从FTP服务器得到文件,现在的想法有两种方式
1 通过 ftp://user:password@domain/path_to_file/file_name 这样的URL来创建 File 对象,但这样好像行不通
2 类似于映射网络硬盘,我的两台服务器是位于同一个网络内的,可不可以通过像 NFS 这样的东西来实现?
*/
java.io.File file = new java.io.File(s);
/*
根据上面的 File 类型创建 FileInputStream, 问题就在这里,用FTP链接方式创建的 File 对象会在这里报错
*/
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
boolean flag = false;
int k = 0;
byte abyte0[] = new byte[i];
/*
....
设置 html head 信息
......
*/
while((long)k < l)
{
int j = fileinputstream.read(abyte0, 0, i);
k += j;
/*
上面读取,然后再向客户端写~~
这样会不会对WEB服务器有压力?效率问题?
*/
m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
}

这是一个方法~~很难实现~~
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
13C#
发布于:2005-08-07 21:06
Re:[求救]从FTP服务器下载文件怎么实现?
第二个办法,松松提的。

每次访问时生成一个临时的随机的用户名和密码,存入 mysql 数据库(FTP服务器用 vsftp ,好像只发现它可以以MYSQL数据库作为存放用户名和密码的东西。。。)
这个临时的用户名和密码在一定的时间之内失效。
然后返回给客户端一个 ftp://m_user:m_psw@domain/... 的链接

这样的话,如果文件一次下载完就没有问题,但如果是要断点续传就不知道该怎么办了~~
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
14C#
发布于:2005-08-09 09:00
Re:[求救]从FTP服务器下载文件怎么实现?
抄襲 smartupload 的辦法,可以按下面的方式實現
但是估計速度有問題~~
修改下讀的時候不要一次全讀(一次65535 byte?)
String surl = "ftp://user:psw@domain/path/file";
		try{
		InputStream is = new URL(surl).openStream();
		BufferedInputStream bis = new BufferedInputStream(is);
		StringBuffer s = new StringBuffer();
		int c;
		while((c = bis.read()) > -1){
			s.append((char)c);
		}
		}catch(Exception e){
			e.printStackTrace();
		}
'

還是覺得可能用松松的辦法更好一些~~
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
suchasplus
作家
作家
  • 铜币16枚
  • 威望11点
  • 贡献值1点
15C#
发布于:2005-08-09 11:27
Re:[求救]从FTP服务器下载文件怎么实现?
第二个办法,松松提的。每次访问时生成一个临时的随机的用户名和密码,存入 mysql 数据库(FTP服务器用 vsftp ,好像只发现它可以以MYSQL数据库作为存放用户名和密码的东西。。。)这个临时的用户名和密码在一定的时..


好像有的服务器就是这样的.....区别只在时间长短
The history of these days will be written in blood... By crushing the armies of our enemy, by seizing the weapons they thought to turn against us, we were fighting for our very existence!
游客

返回顶部