I get this error when I try to save a file. my route:
Route::post('/file-upload', [DocumentController::class, 'fileUpload'])->name('file.upload');
my controller :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; // Importe Auth
use App\Repositories\DocumentRepository; // Importe le DocumentRepository
use Illuminate\Support\Facades\Log;
class DocumentController extends Controller
{
// Propiété pour stocker le référentiel DocumentRepository
protected $documentRepository;
// Contructeur pour injecter le référentiel dans le controller
public function __construct(DocumentRepository $documentRepository)
{
$this->documentRepository = $documentRepository;
}
public function fileUpload(Request $request)
{
try {
Log::info('Requête reçue: ', $request->all());
$request->validate([
'type_document_id' => 'required|string',
'nom' => 'required|string',
'confidentiel' => 'boolean',
'commentaire' => 'nullable|string',
'fichier' => 'nullable|file|mimes:jpeg,jpg,png,pdf,doc,docx|max:2048',
]);
$path = null;
if ($request->hasFile('fichier')) {
$path = $request->file('fichier')->store('documents');
Log::info('Fichier stocké à: ' . $path);
}
$data = [
'type_document_id' => $request->type_document_id,
'nom' => $request->nom,
'confidentiel' => $request->confidentiel ?? 0,
'commentaire' => $request->commentaire,
'file_path' => $path,
];
$document = $this->documentRepository->create($data);
Log::info('Document enregistré dans la base de données: ' . $document->id);
return redirect()->back()->with('success', 'Document téléchargé avec succès.');
} catch (\Exception $e) {
Log::error('Erreur lors du stockage du document: ' . $e->getMessage());
return redirect()->back()->with('error', 'Une erreur s\'est produite lors du téléchargement du document.');
}
}
}
my javascript:
(function () {
"use strict";
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("#my-awesome-dropzone", {
url: "{{ route('file.upload') }}",
autoProcessQueue: false,
uploadMultiple: true,
parallelUploads: 5,
maxFiles: 5,
addRemoveLinks: true,
acceptedFiles: ".jpeg,.jpg,.png,.pdf,.doc,.docx",
init: function() {
var dz = this;
document.querySelector("#submit-all").addEventListener("click", function(e) {
e.preventDefault();
if (dz.getQueuedFiles().length > 0) {
dz.processQueue();
} else {
alert("Veuillez sélectionner au moins un fichier avant de soumettre.");
}
});
this.on("sendingmultiple", function(files, xhr, formData) {
var documentType = document.querySelector("#documentType");
var nomDocument = document.getElementById("nom_document");
var confidentiel = document.querySelector("#confidentiel");
var commentaire = document.getElementById("commentaire");
var fichier = document.getElementById("fichier");
if (documentType) formData.append("type_document_id", documentType.value);
if (nomDocument) formData.append("nom", nomDocument.value);
if (confidentiel) formData.append("confidentiel", confidentiel.checked ? 1 : 0);
if (commentaire) formData.append("commentaire", commentaire.value);
if (fichier && fichier.files.length > 0) {
for (let i = 0; i < fichier.files.length; i++) {
formData.append("fichier[]", fichier.files[i]);
}
}
});
this.on("successmultiple", function(files, response) {
alert("Fichiers téléchargés avec succès !");
$('#myModal').modal('hide');
dz.removeAllFiles();
});
this.on("errormultiple", function(files, response) {
console.error("Erreur d'upload", response);
});
this.on("error", function(file, errorMessage, xhr) {
if (xhr && xhr.status === 422) {
var errors = JSON.parse(xhr.responseText);
Object.keys(errors.errors).forEach(function(key) {
console.log(key + ": " + errors.errors[key]);
});
}
});
}
});
})();
my view:
<!-- BEGIN: Modal Toggle -->
<div class="text-center">
<a href="javascript:;" data-tw-toggle="modal" data-tw-target="#basic-modal-preview" class="btn btn-primary">Ajouter pièce jointe</a>
</div>
<!-- END: Modal Toggle -->
<!-- BEGIN: Modal Content -->
<div id="basic-modal-preview" class="modal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body p-10 text-center">
<!-- BEGIN: Multiple File Upload -->
<div class="intro-y box mt-5">
<div id="multiple-file-upload" class="p-5">
<div class="preview">
<form action="{{ route('file.upload') }}" class="dropzone" id="my-awesome-dropzone" method="post" enctype="multipart/form-data">
@csrf
<div class="mb-3">
<label for="documentType" class="form-label">Type de document
<span class="text-danger">*</span>
</label>
<select id="documentType" class="form-select" name="type_document_id" required>
<option value="">Choisir</option>
@foreach ($typeDocs as $id => $libelle)
<option value="{{ $id }}" {{ old('type_document_id') == $id ? 'selected' : '' }}>{{ $libelle }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="nom_document">Nom du document</label>
<input type="text" name="nom" id="nom_document" class="form-control">
</div>
<div class="form-group">
<label for="confidentiel">Ce document est-il confidentiel ?</label>
<input type="checkbox" name="confidentiel" id="confidentiel" value="1">
</div>
<div class="form-group">
<label for="commentaire">Commentaire</label>
<textarea name="commentaire" id="commentaire" class="form-control"></textarea>
</div>
<div class="fallback">
<input name="fichier" id="fichier" type="file" multiple/>
</div>
<div class="dz-message" data-dz-message>
<div class="text-lg font-medium">Déposez les fichiers ici ou cliquez pour télécharger.</div>
</div>
</form>
</div>
</div>
<!-- Boutons de soumission et annulation -->
<div class="mt-3 text-right">
<button type="button" class="btn btn-secondary" data-tw-dismiss="modal">Annuler</button>
<button type="button" class="btn btn-primary" id="submit-all">Soumettre</button>
</div>
</div>
<!-- END: Multiple File Upload -->
@othniel_dev Can you tell us what the error is that you get?
Ps. I have updated your post to get the codeblocks working for all the code :)
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community