在观察了对这个问题的许多疑问之后,我将一步一步地离开这里,给出我为这个问题找到的解决方案。
为此,我们将使用 getid3 包,一个媒体文件解析器。该解决方案在 Laravel 6.x 上进行了测试,但它与多个版本的 Laravel 兼容。
1 - 使用 Composer 在 Laravel 上安装它,在项目的根目录使用控制台类型:
$ composer require james-heinrich/getid3
在本例中,我们将创建一个端点来发送一个 .mp3 文件并返回其持续时间。
2 - 创建一个路由来发送文件:
Route::post('media', 'FilesController@media');
3 - 创建一个控制器来获取文件并返回持续时间:
class FilesController extends Controller
{
public function media(Request $request)
{
$file = $request->file('upload');
if(!empty($request->file('upload'))) {
$getID3 = new \getID3;
$ThisFileInfo = $getID3->analyze($file);
$len= @$ThisFileInfo['playtime_string']; // playtime in minutes:seconds, formatted string
return $len;
}
}
4 - 发送文件:
使用 POSTMAN 进行测试(可以检查 Laravel 中的一切是否正常):
注意:POSTMAN 中的上传字段是 FILE 类型。
使用卷曲/PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://localhost/api/media",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array('upload'=> new CURLFILE('/home/fellipe/Desktop/android-timeless.mp3')),
CURLOPT_HTTPHEADER => array(
"Content-Type: application/x-www-form-urlencoded",
"Accept: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;