2013-04-21 93 views
1

我有一个多服务器设置。描绘一个客户端,一个运行rails的web服务器和一个存储数据的实例。我需要一种方法通过Web服务器从客户端访问数据存储文件。通过scp的服务器文件

目前我正在使用scp将文件下载到临时目录中的Web服务器,然后将客户端重定向到tmp url。

我更希望能够通过网络服务器流式传输文件而不用存储它们。

有关如何做到这一点的任何建议?

回答

0

一种替代的方法是使用SSHFS和挂载远程服务器(只读)

sshfs -o ro server:/path/to/files path/on/webserver/to/mount 

http://www.howtogeek.com/howto/ubuntu/how-to-mount-a-remote-folder-using-ssh-on-ubuntu/


在通过你的问题流方面:

你可以这样做像这样:

data = `ssh server 'cat path/to/file/on/server'` 
send_data(data) 

http://apidock.com/rails/ActionController/Streaming/send_data


这里的技巧是使用,而不是SCP SSH,从你的shell

ssh server 'cat path/to/file' > local_file 

这使您可以将文件发送到标准输出本地尝试一下(它不能做通过scp。)


这允许您流式传输文件,但我不建议这样做。

  1. 您正在将文件加载到Ruby中,这将不必要地膨胀您的过程。
  2. 失去X-SENDFILE的好处卸载你的轨道之外的下载过程
  3. 如果路径中包含用户提供的数据,您通过外壳注塑介绍自己(和服务器)伤的世界。