【问题标题】:Sending a file to the browser for Downloading将文件发送到浏览器进行下载
【发布时间】:2011-08-09 04:39:56
【问题描述】:

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

如果我运行一个系统命令来 tar 一大堆文件(其名称在一个数组中),我将如何直接“流式传输”压缩包,以便用户可以下载文件而不在本地存储压缩的压缩包?

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

编辑:所以我有 perl 流式传输文件,但我如何在 Javascript 端处理它。

perl 调用是这样进行的:

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

【问题讨论】:

    标签: javascript linux perl


    【解决方案1】:

    使用管道。

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

    【讨论】:

    • 谢谢。但是如何处理来自 javascript 中 perl 脚本的回复? Javascript 通过 ajax 调用调用 perl 函数。
    • 不要使用 ajax。只需 document.location 到 perl 页面。为了回答您对另一个回复的问题,您将文件列表放在document.location 的网址中。示例:document.location=download.perl?file1=foo&file2=bar 等。或者在 url 参数中使用数组。 $.param() 可以帮到你。
    • 一切正常,谢谢:)。但是还有一件事,它是否只会在完成创建 tarball 后才让用户下载?有没有办法在压缩和创建时通过管道下载它?当前:打印“Content-Type:application/x-download\n”; print "Content-Disposition:attachment;filename=download.tar.gz\n\n";打印tar zc - $path/$file
    • @Falcata 这对我来说看起来不错,除了没有 application/x-download 使用 application/octet-streamapplication/x-tar 这样的东西。它应该在创建 tar 时允许下载,否则您需要调查缓冲,并找出谁在缓冲它。
    【解决方案2】:

    【讨论】:

    • 我正在做同样的事情!但是我如何在 JavaScript 端提交呢?
    • 不要使用 AJAX,只需从页面进行 URL GET/POST 调用。 MIME 标头将自动打开下载对话框。
    • 如果我不使用 ajax 则无法传入需要下载的文件列表。
    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多