FilePond.revert ne transfère pas les fichiers d'identifiant uniques vers le contrôleur laravel.
Comment supprimer le fichier téléchargé par identifiant?
FilePond JS
public function revert(Request $request){
return response()->json($request->all());
}
Le chargement des images fonctionne correctement. Renvoie le fichier d'ID unique en réponse.
public function process(){
$file = FilesUploadService::save();
return response($file->collection->id, 200)
->header('Content-Type', 'text/plain');
}
Vide ici Je ne trouve pas l'ID de fichier. Qui doivent être supprimés
var csrf = $('meta[name="csrf-token"]').attr('content');
FilePond.setOptions({
server: {
url: '/file/upload/',
process: {
url: 'process',
headers: {
'X-CSRF-TOKEN': csrf
},
onload: function (responce) {
console.log(JSON.parse(responce))
},
},
revert: {
url: 'revert',
headers: {
'X-CSRF-TOKEN': csrf
},
onload: function (x) {
// X - empty, why????
console.log(x)
},
},
load: {
url: 'load/',
},
},
})
FilePond.create(document.querySelector('.filepond[type="file"]'), {
files: [
{
source: '11',
options: {
type: 'local',
}
},
]
});
4 Réponses :
La méthode onload ci-dessous doit renvoyer un identifiant unique à FilePond. Ainsi, par exemple, si l'identifiant unique se trouve dans responce.id , vous ajoutez la ligne de retour comme indiqué.
onload: function (responce) {
console.log(JSON.parse(responce))
return JSON.parse(responce).id // added
},
C'est ce que j'ai fait sur l'un de mes projets, mais la demande de "suppression" est toujours vide ...
Avez-vous réussi à faire fonctionner cela? FilePond utilise l'en-tête DELETE lors de la restauration, c'est peut-être pourquoi vous n'obtenez rien de la requête.
Peut-être quelque chose comme ça?
public function revert(){
$response = new stdClass();
if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
$file_name = strip_tags(file_get_contents("php://input"));
if (is_string($file_name) && FilesUploadService::delete($file_name)) {
$response->id = $file_name;
$response->success = true;
} else {
$response = false;
}
} else {
$response = false;
}
return response()->json($response);
}
p>
Quiconque a encore du mal:
request-> getContent () retournera la charge utile de la requête envoyée par filepond.
Dans la méthode de retour dans le contrôleur:
public function revert(Request $request){
$fileId = request()->getContent();
//use $fileId to delete file from filesystem
}
Cela fait quelques heures que j'ai du mal à restaurer / supprimer un fichier importé au début à l'aide de FilePond , mais après l'avoir nettoyé là-bas documentation J'ai trouvé un hack rapide pour contourner la situation.
De votre côté JavaScript, vous feriez quelque chose comme le suivant pour télécharger le fichier via XHRobject:
public function uploadFiles(Request $request)
{
if ($request->has('attachments')) {
if (!file_exists(storage_path('app/tmp'))) {
mkdir(storage_path('app/tmp', 0777, true));
}
$file = $request->file('attachments')[0];
$file_name = $file->getClientOriginalName();
$file_path = storage_path("app/tmp/{$file_name}");
$file->storeAs(null, $file_name, 'tmp');
}
}
public function revertFiles(Request $request)
{
unlink(storage_path("app/tmp/{$request->filename}"));
}
Passons maintenant à la partie délicate: Rétablir / Supprimer:
<script>
const filepond_root = document.querySelector('.filepond--root');
filepond_root.addEventListener('FilePond:processfilerevert', e => {
$.ajax({
url: "{!! route('ajax.revertFiles') !!}",
type: 'POST',
data: {'_token': '{!! csrf_token() !!}', 'filename': e.detail.file.filename}
})
});
</script>