我知道这是一个已知的问题,但是我已经尝试了几乎所有内容,但我仍然坚持下去。我有一个结构如下的简单项目:
[Client] => [Gateway] => [API]
Laravel 6 Lumen 6 Lumen 6
localhost:8000 localhost:8001 localhost:8002
由于我刚刚开始从事这个项目,只是为了证明这项工作是否有效,因此我已禁用所有
auth
内容。
在我的[[API]]上,我在public
中有一个名为uploads
的文件夹(基本上在http://localhost:8002/uploads/audio.amr
中),其中有1个音频文件(.amr),我正尝试从客户端视图播放它。由于html无法播放.amr文件,因此我不得不使用插件。我正在使用此BenzAMRRecorder。
[客户端]我进行了ajax请求以获取音频文件的URL。
client
通过枪口连接到gateway,并且gateway也使用API进行连接,我成功获得了URLhttp://localhost:8002/uploads/audio.amr
。 $.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url : 'client/get_url_audio',
type : 'GET',
data : {
},
dataType:'json',
success : function(data) {
/** Here's the way to play the file */
var amr = new BenzAMRRecorder();
amr.initWithUrl(data['url']).then(function() {
amr.play();
});
},
});
我成功获取了URL,但是当尝试访问URLBenzAMRRecorder
http://localhost:8002/uploads/audio.amr
时,出现了此错误:错误:
已从CORS策略阻止从原点http://localhost:8002/uploads/audio.amr访问'http://localhost:8000处的XMLHttpRequest:在请求的资源上没有'Access-Control-Allow-Origin'标头。上添加了我已经阅读了很多方法来解决此问题,并在
API
CorsMiddleware
并带有句柄功能,如下所示:public function handle($request, Closure $next)
{
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Max-Age' => '86400',
'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With'
];
if ($request->isMethod('OPTIONS'))
{
return response()->json('{"method":"OPTIONS"}', 200, $headers);
}
$response = $next($request);
foreach($headers as $key => $value)
{
$response->header($key, $value);
}
return $response;
}
然后在bootstrap/app.php
上添加
$app->middleware([
App\Http\Middleware\Cors::class
]);
但是我仍然遇到相同的错误。我想的是,当方法到文件夹,但是我不知道为什么。有人可以帮我解决这个问题吗?编辑:我也尝试过amr.initWithUrl(data['url'])
访问API文件夹时,它不会进入中间件,并且尝试在没有经过中间件的情况下尝试访问direct
github.com/barryvdh/laravel-cors
我知道这是一个已知的问题,但是我已经尝试了几乎所有内容,但我仍然坚持下去。我有一个简单的项目,其结构如下:[Client] => [Gateway] => ...
.htaccess
文件中添加以下内容,该文件包含您尝试访问的资源:X-CSRF-TOKEN
?