2017-10-11 4 views
0

Je veux télécharger des fichiers, mais quand je poste avec Axios, mon formdata est une demande vide LaravelAxios/Laravel/demande post formdata est vide

de vuejs: uploader.vue

filesChange(e) { 
    const fileList = e.target.files; 
    const formData = new FormData(); 
    if (!fileList.length) return; 
    for (let i = 0; i < fileList.length; i += 1) { 
     console.log(fileList[i]); 
     formData.append('files', fileList[i], fileList[i].name); 
    } 
    this.save(formData); 
    }, 

sortie de la console, tous les fichiers sont bouclées et ajouté à formData output from console, all files are looped and appended to formData

save(formData) { 
    photosApi.storePhotos(formData, this.galleryId).then((response) =>  { 
     console.log(response); 
    }).catch((error) => { 
     console.log(error); 
    }); 
}, 

vuejs: photosApi.js

storePhotos(formData, id) { 
    return axios.post(`api/photo/${id}`, formData); 
}, 

quand j'inspecter mon api-appelle je vois ce when i inspect my api-call i see this

Laravel: api.php

Route::post('/photo/{id}', '[email protected]'); 

Laravel: PhotoController.php

public function store(Request $request, $id) 
{ 
    return $request->all(); 
} 

le retour de mon la réponse est seulement vide ... the return of my response is only empty...

Qu'est-ce qui ne va pas?

+0

essayer de retourner la réponse JSON. –

+0

@ pdshah3690 également vide avec la réponse de retour() -> json ($ request-> all()); –

+0

@ParthShah avec print_r ($ request-> all()); vous pouvez inspecter les données –

Répondre

1

Je l'ai résolu finalement :)

le premier problème était cette ligne

formData.append('files', fileList[i], fileList[i].name); 

append a été toujours le dernier en écrasant l'entrée "fichiers" ...(Je pensais qu'il travaillait comme push)

donc la première solution était

formData.append(`file${i}`, fileList[i], fileList[i].name); 

voir les données ne pas utiliser

return $request->all(); 

utiliser à la place

print_r($request->all()); 

maintenant vous pouvez voir quelque chose utile lorsque vous inspectez votre apicall

enter image description here

maintenant il était facile

$data = $request->all(); 
foreach ($data as $key => $file) { 
    $file->move('/public/images', $file->getClientOriginalName()); 
}; 

tous mes fichiers sont stockés dans mon dossier;)

MISE À JOUR: J'ai découvert, si j'écris des fichiers avec « [] "alors je reçois aussi les données sous forme de tableau

for (let i = 0; i < fileList.length; i += 1) { 
    formData.append('files[]', fileList[i], fileList[i].name); 
} 

Et dans mon contrôleur j'avoir accès à mes fichiers avec cette ligne, mais sans le « [] »

$files = $request->file('files');