从存储Laravel获取mp3文件

时间:2018-12-20 08:47:49

标签: laravel

我在laravel的存储区中上传了mp3文件,因此它们受到保护,其他人无法找到。现在,我希望mp3文件在html的音频标签中播放。这似乎可行,但是当我检查元素并获取音频标签的url并在新选项卡中遵循此操作时,我会获得音频文件。这不是我想要的,因为人们可能看不到此文件。

我已经尝试过以下代码。但是,当您检查音频标签的元素并遵循url时,仍会得到文件。

blade.php

<audio controls style="height:54px;"><source src="{{ route('getAudio', $song['name']) }}"></audio>

web.php

Route::get('/get-audio/{filename}', 'SongsController@getAudio')->name('getAudio');

SongsController.php

public function getAudio($filename){ $fileContents = Storage::disk('local')->get('temporary_songs/'.$filename); $response = Response::make($fileContents, 200); $response->header('Content-Type', "audio/mpeg"); return $response; }

我只希望您可以在音频标签中播放文件,但他们无法获取文件。

2 个答案:

答案 0 :(得分:0)

您可以做的是在.htaccess中创建重写规则并从数据库创建dynic链接,并且可以每天更新该链接,因此,无论何时从网站访问该链接的任何人都可以打开该链接,但该链接仅适用于一段时间。
您可以使用file system functions读写文件,例如:

$data = <<<EOF
RewriteEngine on
RewriteRule …
EOF;
file_put_contents('.htaccess', $data);

但是,如果您使用一条静态规则将请求重定向到PHP文件,然后执行其余操作,则会更加灵活。

RewriteEngine开启

 RewriteRule ^DynamicLink/(.*) /uploads/subfolder/$1 [L,NC]

答案 1 :(得分:0)

路线

Route::get ( '/audio/{file?}/{extension?}',  "YourController@embedAudio" );

控制器

public function embedAudio( Request $request ){

    $filePath = storage_path() . '/app/' . $request->file . '.' . $request->extension;


    try {
        $file = file_exists ( $filePath );
    }   
    catch (FileNotFoundException $e) {
        return \Redirect::back()->withErrors([ "File doesn't exist" ]); 
    }   
    return response()->file( $filePath );
}   

查看

            <audio controls="" style="vertical-align: middle" src="/audio/file_name/mp3" type="audio/mp3" controlslist="nodownload">
                Your browser does not support the audio element.
            </audio>