使用API​​将文件下载到服务器(触发提示)

时间:2014-04-16 16:11:25

标签: php api

我想在我的服务器上存储使用API​​检索的一些数据。具体来说,这些是(免费)学习曲目的.mp3文件。我遇到了一个问题。从请求返回的mp3链接不是直接的.mp3文件,而是进行ADDITIONAL API调用,通常会提示您下载mp3文件。

file_put_contents似乎并不喜欢这样。 mp3文件是空的。

以下是代码:

$id = $_POST['cid'];
$title = $_POST['title'];

if (!file_exists("tags/".$id."_".$title))
{
    mkdir("tags/".$id."_".$title);
}
else
echo "Dir already exists";

file_put_contents("tags/{$id}_{$title}/all.mp3", fopen($_POST['all'], 'r'));

这是我之前提到的第二个API的示例: http://www.barbershoptags.com/dbaction.php?action=DownloadFile&dbase=tags&id=31&fldname=AllParts

有没有办法绕过这个中间步骤?如果无法访问mp3的直接网址,有没有办法将文件下载提示重定向到我的服务器?

提前感谢您的帮助!

修改

这是当前的片段。我应该回应一下,对吗?

$handle = fopen("http://www.barbershoptags.com/dbaction.php?action=DownloadFile&dbase=tags&id=31&fldname=AllParts", 'rb');
$contents = stream_get_contents($handle);
echo $contents;

因为这没有回音。

好吧,我想file_get_contents应该可以很好地处理重定向,但这并没有发生。所以我找到了这个函数:https://stackoverflow.com/a/4102293/2723783来返回API的最终重定向。我将该URL插入file_get_contents和volia!

1 个答案:

答案 0 :(得分:0)

您似乎只是打开文件处理程序而不是使用fread()或其他类似函数获取内容:

http://www.php.net/manual/en/function.fread.php

$handle = fopen($_POST['all'], 'rb')
file_put_contents("tags/{$id}_{$title}/all.mp3", stream_get_contents($handle));