可以用PHP从Dropbox API V2流mp3 / mp4吗?

时间:2019-05-20 12:36:27

标签: laravel streaming dropbox-api spatie

昨天我进行了设置,以便可以使用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没有直接链接到物理文件的信息,因此我不确定是否可能。

1 个答案:

答案 0 :(得分:1)

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