php - 如何将大文件从 S3 流式传输到 laravel View

标签 php laravel-5 stream

我已经完成了大部分工作,但很难完成它。

现在我有一个简单的路线:

Route::get('file/{id}/', 'FileController@fileStream')->name('file');

此路由连接到 FileController 中的操作:

public function fileStream($id){

    $audio = \App\Audio::where('id', $id)->first();

    $client = S3Client::factory([
        'credentials' => [
            'key'    => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
        ],
        'region' => env('S3REGION'),
        'version' => 'latest',
    ]);


    // Register the stream wrapper from an S3Client object
    $client->registerStreamWrapper();

    if ($stream = fopen('s3://[bucket_name]/'. $audio->audio_url, 'r')) {
        while (!feof($stream)) {
            echo fread($stream, 1024);
        }
        fclose($stream);
    }    
}

这适用于浏览器:如果我转到 url:/file/1,它会查找正确的文件,并在一个干净的浏览器窗口中得到:

enter image description here

然后在我看来,我正在尝试输出如下音频:

   <audio>
      <source src="{{ url('file', ['id' => $section->id]) }}" type="{{ $section->audio_mime_type}}"></audio>
   </audio>

但是没有播放器将输出输出到屏幕。

TIA

最佳答案

你应该使用 Laravel 流式响应

return response()->streamDownload(function () use ($audio) {
    if ($stream = fopen('s3://[bucket_name]/'. $audio->audio_url, 'r')) {
        while (!feof($stream)) {
            echo fread($stream, 1024);
            flush();
        }
        fclose($stream);
    }    
}, 'file-name.ext');

关于php - 如何将大文件从 S3 流式传输到 laravel View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51622582/

相关文章:

php - 用于 PHP 处理新行的自定义 Markdown

php - mysql得到第4、5、6、7个结果

c# - NHibernate - 流式传输大型结果集?

javascript - 单击评论按钮时将评论附加到特定帖子vue js

c# - Stream.Seek(0, SeekOrigin.Begin) 或 Position = 0

java - 有没有办法在特定时间内读取输入流?

javascript - 在电子邮件中收到未填写的联系表格

php - Mysql PHP 任意增量

php - Laravel 5 RESTful API - 理解资源概念

laravel - 流明开箱即用