2011-08-08 97 views
2

我正在构建一个简单的可视化下载程序。用户选择他们想要下载的文件,然后下载这些文件。但是我处理的文件相当大。我所做的是让用户选择他们需要的文件,并通过文件名列表perl成功。我想要做的是通过perl脚本将压缩的tarball流式传输到他们的浏览器,但我不确定我会如何做到这一点。发送文件到浏览器进行下载

如果我运行一个系统命令tar文件的一大堆(它的名字是一个数组)我怎么会“流”直接,以便用户可以下载文件,而无需在本地存储压缩的压缩包的压缩包?

任何帮助,将不胜感激。谢谢。

编辑:所以我有perl流文件,但我如何处理它在Javascript结束。

Perl的呼叫正在取得这样的:

$.ajax({ 
     type: "POST", 
     url: "/cgi-bin/download.pl", 
     data: info, 
     success: function(data){ 
      window.open(data,'Download'); 
      } 
    }); 

回答

2

使用管道。

运行没有f参数的tar(即没有文件,输出为突出显示)。然后捕获并发送输出。您可以使用popen(),或者只是反引号:`。

+0

感谢。但是,我如何处理javascript中的perl脚本的回复? Javascript通过ajax调用来调用perl函数。 – Falcata

+0

请勿使用ajax。只需将'document.location'添加到perl页面。为了在另一个答复中回答你的问题,你把文件列表放在'document.location'的url中。例如:'document.location = download.perl?file1 = foo&file2 = bar'等。或者在url参数中使用一个数组。 '。.param()'可以帮助你解决这个问题。 – Ariel

+0

我得到了一切工作谢谢:)。但是还有一件事,一旦它完成了创建tarball,它只会让用户下载吗?有没有办法管道下载压缩和创建?当前: print“Content-Type:application/x-download \ n”; print“Content-Disposition:attachment; filename = download.tar.gz \ n \ n”; print'tar zc - $ path/$ file' – Falcata

1
+0

我正在做同样的事情!但是,我怎么把它交给JavaScript端呢? – Falcata

+1

不要使用AJAX,只需从页面进行URL GET/POST调用即可。 MIME头将自动打开下载对话框。 –

+0

如果我不使用ajax,那么我不能传入我需要下载的文件列表。 – Falcata