Можно ли транслировать mp3 / mp4 из Dropbox API V2 с PHP? - PullRequest
0 голосов
/ 20 мая 2019

Вчера я настроил его так, чтобы я мог обслуживать файлы MP3, хранящиеся в моем Dropbox, используя https://github.com/spatie/dropbox-api и Laravel. Однако это работает только для небольших файлов, так как он работает сейчас: сначала нужно загрузить весь файл, а затем передать его из 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 Ответ

1 голос
/ 21 мая 2019

API Dropbox предоставляет возможность извлекать временные прямые ссылки, которые можно использовать для потоковой передачи файлов, например, через конечную точку / 2 / files / get_teilitary_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

...