2017-07-27 2 views
1

Je suis en train de développer une API en php avec un framework laravel qui retourne des enregistrements pour une application ionique. Donc, le problème est que j'envoie des images et des chemins de fichiers et l'application donne une erreur lorsque vous essayez de télécharger le fichier avec cross origin error.Erreur - Erreur de demande d'origine croisée

La méthode envoie un JSON comme ceci:

[{ 
"name": "Braga", 
"ref": "6903", 
"cover": "/images/uploads/0_C6903_597614930f57e.jpg", 
"coverDetail": "/images/uploads/0_D6903_597614930f599.jpg", 
"pdf": "/images/uploads/0_P6903_597614930f5b0.epub", 
"companyId": "0" 
}] 

Et j'ai une autre méthode (chemin) pour obtenir le fichier:

public function getFile($url){ 
$file= public_path(). $url; 

$headers = array(
    'Content-Type: application/epub', 
); 

return Response::download($file, '', $headers);} 

Si fait l'utiliser sur le navigateur, il fonctionne, il télécharge le fichier sur mon ordinateur portable, mais quand j'essaie d'obtenir le fichier à l'application, il me donne cross origin error.

Après une recherche à ce sujet à jour mes .htaccess ajoutant ces lignes:

<IfModule mod_headers.c> 
     Header always set Access-Control-Allow-Origin "*" 
     Header always set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Access-Control-Allow-Origin" 
     Header always set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
</IfModule> 

Comment puis-je résoudre ce problème?

Merci

+0

Jetez un oeil à ce https://stackoverflow.com/questions/33076705/laravel -5-1-api-enable-cors –

+0

Fonctionne avec https://github.com/barryvdh/laravel-cors? @AliTurki – user3242861

Répondre

1

Créer un nouveau middleware en Laravel par le terminal ouvert ou fenêtres commandes cmd

php artisan make:middleware CorsMiddleware

ou tout autre nom voulez-vous utiliser

Et mettre ce code

<?php 

namespace App\Http\Middleware; 

use Closure; 

class CorsMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 

     $domains = ["http://example.com"]; 

     if(isset($request->server()['HTTP_ORIGIN'])){ 
      $origin = $request->server()['HTTP_ORIGIN']; 

      if(in_array($origin,$domains)){ 
      header("Access-Control-Allow-Origin: " . $origin); 
      header("Access-Control-Allow-Headers: Origin,Content-type,Authorization"); 
      } 

     } 

     return $next($request); 
    } 
} 

A e en utilisant ce Middleware à courir à chaque demande à votre demande

Ouvrir Kernel.php dans le répertoire Http et enregistrez votre Middleware

protected $middleware = [ 

    \App\Http\Middleware\CorsMiddleware::class, 

]