我在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; }
我只希望您可以在音频标签中播放文件,但他们无法获取文件。
答案 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>