Se state usando lumen da back-end magari insieme ad vuejs o qualisiasi linguaggio di front-end ma penso che il problema si ponga anche usando laravel.
vi sarà capitato il problema del CORS e immaginino che avete risolto creando la classe CorsMiddleware.
e se in tutto questo avete usato questa soluzione
$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,Accept, Application' ]; if ($request->isMethod('OPTIONS')) { return response()->json('{"method":"OPTIONS"}', 200, $headers); } $response = $next($request); foreach($headers as $key => $value) { $response->header($key, $value); }
quando vi ritrovere a dover scaricare un file dalla vostra webapp, magari usando reponse->download() sicuramente sarete incappati nel problema di network error con errore 500 da parte del server, dove ils erver vi rilascerà il seguente errore
Call to undefined method Symfony\Component\HttpFoundation\BinaryFileResponse::header()
in breve cambiate la classe con questo codice
$response = $next($request); $response->headers->set('Access-Control-Allow-Origin' , '*'); $response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE'); $response->headers->set('Access-Control-Allow-Credentials', 'true'); $response->headers->set('Access-Control-Max-Age', '86400'); $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Application'); return $response;
e anche oggi potrò andare a dormire sereno.
Quindi quanto avete letto sopra vi permette di ritornare in formato byte qualsiasi documento attraverso il codice sotto
</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p> $path = app()->basePath('public/'); $response= response()->download($path.$request->pp); ob_end_clean(); return $response;</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>
lato Front-end invece sotto Vuejs dovete convertire i byte in download forzato e vi consiglio di leggere questo articoli Force File Download in Vuejs using Axios