可以使用 PHP 从 Dropbox API V2 流式传输 mp3/mp4 吗?
possible to stream a mp3/mp4 from Dropbox API V2 with PHP?
昨天我设置了它,所以我可以使用 https://github.com/spatie/dropbox-api 和 Laravel 提供存储在我的 Dropbox 中的 MP3 文件。然而,这只适用于小文件,就像它现在的工作方式一样,它必须首先加载整个文件,然后从 Laravel 提供它。这对电影或长曲目根本不起作用,因为它需要很长时间并且内存不足。
这是我目前使用的代码
$authorizationToken = 'my-api-token';
$client = new \Spatie\Dropbox\Client($authorizationToken);
$path = "/offline/a-very-long-song.mp3"; // path in dropbox
$stream = $client->download($path);
$file = stream_get_contents($stream);
fclose($stream);
unset($stream);
$file_info = new \finfo(FILEINFO_MIME_TYPE);
return response($file, 200)->withHeaders([
'Content-Type' => $file_info->buffer($file),
'Content-Disposition' => 'inline; filename="' . basename($path) . '"',
]);
我想知道是否有一种流式传输方式,这样它就不必先加载整个文件。我想这在浏览器中加载媒体文件时自然会发生,但由于 Dropbox 没有指向物理文件的直接链接,我不确定是否可行。
Dropbox API 确实提供了通过 /2/files/get_temporary_link 端点检索可用于流式传输文件的临时直接链接的功能:
https://www.dropbox.com/developers/documentation/http/documentation#files-get_temporary_link
在您使用的库中,它似乎可以作为 getTemporaryLink
方法使用,如此处的示例所示:
https://github.com/spatie/dropbox-api#a-minimal-implementation-of-dropbox-api-v2
昨天我设置了它,所以我可以使用 https://github.com/spatie/dropbox-api 和 Laravel 提供存储在我的 Dropbox 中的 MP3 文件。然而,这只适用于小文件,就像它现在的工作方式一样,它必须首先加载整个文件,然后从 Laravel 提供它。这对电影或长曲目根本不起作用,因为它需要很长时间并且内存不足。
这是我目前使用的代码
$authorizationToken = 'my-api-token';
$client = new \Spatie\Dropbox\Client($authorizationToken);
$path = "/offline/a-very-long-song.mp3"; // path in dropbox
$stream = $client->download($path);
$file = stream_get_contents($stream);
fclose($stream);
unset($stream);
$file_info = new \finfo(FILEINFO_MIME_TYPE);
return response($file, 200)->withHeaders([
'Content-Type' => $file_info->buffer($file),
'Content-Disposition' => 'inline; filename="' . basename($path) . '"',
]);
我想知道是否有一种流式传输方式,这样它就不必先加载整个文件。我想这在浏览器中加载媒体文件时自然会发生,但由于 Dropbox 没有指向物理文件的直接链接,我不确定是否可行。
Dropbox API 确实提供了通过 /2/files/get_temporary_link 端点检索可用于流式传输文件的临时直接链接的功能:
https://www.dropbox.com/developers/documentation/http/documentation#files-get_temporary_link
在您使用的库中,它似乎可以作为 getTemporaryLink
方法使用,如此处的示例所示:
https://github.com/spatie/dropbox-api#a-minimal-implementation-of-dropbox-api-v2