1

在我们的 Java Web 应用程序中,客户希望将一些大文件上传到 SFTP 服务器并直接从那里下载。客户不想使用任何第三方工具,而是希望应用程序本身具有此功能。

文件上传部分由 JFileUpload 小程序组件和库处理。文件上传后,我可以找出存储文件的确切位置。并且该上传的文件将作为链接显示给用户,他们将单击下载该链接(如 HTTP 或 FTP 文件链接)。

所以我必须决定从 SFTP 服务器下载文件的策略。

一种选择是解析请求,然后连接 SFTP 服务器并通过 HTTP 服务器流式传输文件。但是这里的文件将通过 HTTP 而不是 SFTP 下载,而且它不会达到使用 SFTP 的目的。

我能想到的另一个选择是通过一个小程序,同样像上传。一旦 SFTP 文件的请求到达 HTTP 服务器,它将启动一个页面,其中包含一个带有目录浏览器的小程序,供用户决定保存路径。用户选择保存位置后,文件将自动开始从 SFTP 服务器下载到该位置。这样,连接将完全是 SFTP。

我想知道第二种方法的可行性有多大,以及是否有任何重要的事情我必须处理。哪些 SFTP 库最适合用于此类操作?

此外,请让我知道是否有其他更好的选择来进行上述活动。

编辑

看起来这篇文章看起来像是一个关于从 SFTP 服务器下载的方法的建议请求(可能来自标题,但我想不出任何其他标题!!)。感谢您提供有关 API 的建议,但对我们来说更重要的问题是找出一种方式,用户从 SFTP 服务器下载文件的请求是通过安全 SSH 而不是通过 HTTP 完成的。现在使用提到的 API,我们可以很好地将文件从 SFTP 服务器下载到 HTTP 服务器的文件系统,但之后如果我们必须将相同的文件重定向到用户的机器,我们必须使用 HTTP,这就是我们想要避免的。

我们的第二个想法是使用带有小程序的页面来启动用户客户端和 SFTP 服务器之间的 SFTP 会话,以解决上述问题。

实施起来会有多困难,我们在这方面应该采取什么方法?如果还有其他更好、更简单的方法来完成相同的任务,请提出建议。

4

4 回答 4

2

对于这种事情,我赞成Commons-VFS 。它抽象出实际的文件系统类型,让您可以使用标准接口,而不管底层实现如何。它又依赖于实际系统的其他库,特别是用于 SFTP 的 JScsh。

于 2009-09-22T19:03:53.793 回答
0

客户永远是对的,所以虽然需求对我来说是糟糕的架构,但我会对此表示同情并尝试帮助您解决问题。

小程序方法还可以,但对于 Web 应用程序来说似乎有点笨拙。那里有 javascript sftp 库。这个支持 sftp 并且会给 Web 应用程序一种更自然的感觉,而不是仅仅为了提供文件传输而弹出一个小程序。它不是免费的,但也没有那么贵。它仍然在后台使用小程序来实现文件传输,只是没有向用户显示 java 屏幕。

于 2009-09-22T19:18:04.223 回答
0

我推荐使用JSch,Java 安全通道。它是 SSH2 的纯 Java 实现。除了几乎所有其他 SSH2 选项(XForwarding、端口转发等)之外,它还有很好的 SFTP 示例。我们在许多项目中使用它,并且没有遇到任何问题。我什至将它的 GSS-API (Kerberos) 支持绑定到本机 Kerberos 实现中,并且运行良好。它是 BSD 许可的,因此无论是否商业化,您都不应该在许可方面遇到太多问题。

我看到使用 JSch 构建一个小程序非常简单。最大的问题是确保您的小程序已签名并有权写入/读取本地文件并连接到相关的 SSH 服务器。

于 2009-09-22T17:42:11.620 回答
-1

您是说 SFTP 还是 FTPS(基于 SSL 的 FTP)?如果您真正了解 SFTP,请查看此处:http ://www.spindriftpages.net/blog/dave/2007/11/27/sshtools-j2ssh-java-sshsftp-library/comment-page-1/

于 2009-09-22T16:00:59.747 回答