代码之家  ›  专栏  ›  技术社区  ›  CodeFusionMobile

web应用程序处理用户从SFTP服务器下载文件请求的功能

  •  1
  • CodeFusionMobile  · 技术社区  · 15 年前

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

    文件上传部分由JFileUpload applet组件&图书馆。一旦文件被上传,我就可以找出存储文件的确切位置。上传的文件将作为一个链接显示给用户,用户可以点击下载(比如HTTP或FTP文件链接)。

    一种方法是解析请求,然后连接SFTP服务器并通过HTTP服务器传输文件。但是在这里,文件将通过HTTP而不是SFTP下载,而且它也不能用于使用SFTP的目的。

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

    我想知道第二种方法有多可行,是否有什么重要的事情需要我去处理。哪些SFTP库最适合用于这种类型的操作?

    此外,请让我知道,如果有其他更好的选择做上述活动。

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

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

    执行起来有多困难,我们在这方面应该采取什么办法? 如果还有其他更好的;更简单的方法做同样的任务那么请建议。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Jherico    15 年前

    我赞成 Commons-VFS 为了这种事。它抽象出实际的文件系统类型,并允许您使用标准接口,而不考虑底层实现。它反过来又依赖于实际系统的其他库,特别是用于SFTP的JScsh。

        2
  •  0
  •   monceaux    15 年前

    我建议使用 JSch ,Java安全通道。它是SSH2的纯Java实现。除了几乎所有其他SSH2选项(XForwarding、port forwarding等)之外,它还有很好的例子来实现SFTP。我们在许多项目中使用它,并且没有任何问题。我甚至将它的GSS-API(Kerberos)支持绑定到一个本地Kerberos实现中,效果很好。它是BSD许可的,所以商业与否,你不应该有太多的问题与许可。

        3
  •  0
  •   Yishai    15 年前

    客户总是对的,所以当我对这个需求大呼糟糕的架构时,我只是在这个问题上表达我的同情,并尽力帮助你解决这个问题。

    applet方法还可以,但对于web应用来说似乎有点笨拙。还有javascript sftp库。 This one 支持sftp,与仅仅为了提供文件传输而弹出applet相比,它将给web应用程序带来更自然的感觉。它不是免费的,但也不是那么贵。它仍然在引擎盖下使用applet来实现文件传输,只是没有向用户显示java屏幕。