3
votes

Comment supprimer un fichier sur le serveur? FilePond.revert ne transmet pas de paramètres au contrôleur laravel

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',
                }
            },
        ]
    });


0 commentaires

4 Réponses :


1
votes

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
},


1 commentaires

C'est ce que j'ai fait sur l'un de mes projets, mais la demande de "suppression" est toujours vide ...



0
votes

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>


0 commentaires

1
votes

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
}


0 commentaires

0
votes

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>


0 commentaires