【问题标题】:Is it possible to download something from another website into a zip file download supplied by my company based on form results?是否可以根据表单结果将其他网站的内容下载到我公司提供的 zip 文件下载中?
【发布时间】:2015-07-28 20:59:11
【问题描述】:

很抱歉标题令人困惑,但我尽量精简它。澄清一下,我公司提供了一组产品,可以从我们的网站(免费)下载(下载为 zip 文件)。在我们的产品中,我们包含一些当前托管在我们个人服务器上的视频,但我们也有托管在 Vimeo 上的视频。为了减少服务器流量和下载时间,有人问了这个问题,“我们可以从 Vimeo 而不是我们自己的服务器运行视频下载”吗?这个问题的答案是肯定的,事实上 Vimeo(如果您是专业会员)提供了不同的方式来下载您自己的个人视频,无论是通过他们的 API 还是视频设置中的永久链接。我决定采用永久链接路线,因此通过视频设置 Vimeo 提供了 5 个不同的链接,每个链接都根据所需的质量(耶!)。

但是,我的问题是,是否有某种方法可以通过 php 或 html 在下载页面上创建下拉选择,并且取决于您选择的选择(由于带宽等),我们提供的内容会随视频一起下载在我们产品的正确文件结构中?

让我澄清一下,不是放在下载的 zip 旁边,而是放在里面。

例如,假设我的文件结构如下所示:

Product
    Books (folder)
    Videos (folder)
    Other_content (folder)
    index.html (file)

并且视频存在于“Product/Videos/example.mp4”中。该文件存在于我的服务器上,但我希望客户改为从 Vimeo 下载它。假设我在下面有一个基本形式:

<form method="post">
<select name="videoQuality">
    <option name="formSelect" value="Select">Select...</option>
    <option name="formHD1080" value="HD1080">High Definition (1080p)</option>
    <option name="formHD" value="HD">High Definition</option>
    <option name="formSD" value="SD">Standard Definition</option>
    <option name="formMobile" value="Mobile">Mobile</option>
</select>
<br><br>
<input type="submit" name="formSubmit" value="Download">
</form>

有没有办法让表单选项影响下载的文件来代替“Product/Videos/example.mp4”?而不是放在一边(只是为了让客户不必弄乱文件树)。

【问题讨论】:

  • 如果视频在网络上公开提供,为什么要发送文件而不仅仅是链接?
  • 为了澄清,您希望在每次用户下载此包时从 Vimeo 下载视频并将其压缩为 zip 文件?
  • 似乎这将涉及通过 JavaScript 操作 zip 文件客户端。这些天用 JS 可以做的事情真是太神奇了,但这可能会推动它。这些 zip 文件有多少个“组合”?如果有限,您可以创建它们并通过 CDN 或其他方式为它们提供服务吗?
  • 你可以。你只需要获取文件。如果您知道路径,可以通过file_get_contents() 获取。但这也会在您的服务器上产生使用情况...
  • 你的产品是网站结构吗?为什么不直接在 index.html 中嵌入 vimeo 视频,而不是从视频文件夹中链接它们?

标签: php video download zip vimeo


【解决方案1】:

是的,您可以使用 jszip 加载 zip 文件。比使用 AJAX 下载视频并将其添加到 zip 中。所有这些都发生在浏览器中。

JSZipUtils.getBinaryContent('path/to/content.zip', function(err, data) {
  if(err) throw err; // or handle err

  var zip = new JSZip(data);

  var request = new XMLHttpRequest();
  request.open('GET', 'https://vimeo.com/link/to/download', true);

  request.onload = function() {
    var data = request.responseText;

    zip.folder('Videos').file('video.mp4', data); // Add the video file

    var blob = zip.generate({type:"blob"});
    saveAs(blob, "content.zip"); // Present zip as download
  };

  request.send();
}

代码未经测试,但应该为您提供足够的信息以继续 :)

【讨论】:

  • 立场更正。如今,JavaScript 一切皆有可能,
  • 这很好。它避免了过多的服务器带宽。
  • @Jasny - 阿诺德丹尼尔斯,谢谢!它绝对让我朝着正确的方向前进。我目前没有足够的时间对此进行测试并做出回应,但我肯定明天可以。除了用户特定的问题(来自我还不太了解 jszip 的问题),这似乎是正确的答案,所以我将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
相关资源
最近更新 更多