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


Download file to server using API (it triggers prompt)

我想在服务器上存储使用API检索到的一些数据。具体来说,这些是(免费)学习曲目的.mp3文件。不过我遇到了一个问题。请求返回的mp3链接不是指向一个直接的.mp3文件,而是发出一个附加的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=标记&id=31&fldname=所有部件

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

提前感谢您的帮助!

编辑

这是当前的片段。我应该在回应什么,对吗?

$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!

您似乎只是打开文件处理程序,而不是使用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));