Download file da Lumen-Laravel con Vuejs


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>&nbsp;$path&nbsp;=&nbsp;&nbsp;app()-&gt;basePath('public/');&nbsp;&nbsp;&nbsp;&nbsp;$response=&nbsp;response()-&gt;download($path.$request-&gt;pp);&nbsp;&nbsp;&nbsp;&nbsp;ob_end_clean();&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;$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

Questa voce è stata pubblicata in Uncategorized. Contrassegna il permalink.

Lascia un commento