J'essaie d'envoyer un fichier de plus de 1 Mo, il n'y a pas de problème avec la taille du fichier si j'envoie la demande avec l'action de formulaire html. mais, si j'essaie d'envoyer ces fichiers avec ajax en php, cela indique une erreur dans $ _FILES si la taille du fichier totalise 1 Mo ou plus.
mon paramètre par défaut de php.ini est:
Array { [name] => Array ( [0] => image.jpg ) [type] => Array ( [0] => ) [tmp_name] => Array ( [0] => ) [error] => Array ( [0] => 3 ) [size] => Array ( [0] => 0 ) )
3 Réponses :
votre formulaire html
<script> $('#form').submit(function (e) { e.preventDefault(); var file=$("#file").val().split("\\").pop(); var form=document.getElementById('fileInfoForm'); var fd=new FormData(form); fd.append('file',file); $.ajax({ type: "POST", enctype: 'multipart/form-data', url: 'your_file.php', data: fd, dataType: "json", processData: false, contentType: false, cache: false, success: function (data) { } }) }); </script>
Et votre code ajax est là pour envoyer plus le fichier de 15 mb au script php
<form name="fileInfoForm" class="form-horizontal" id='fileInfoForm' method="post" enctype="multipart/form-data"> <input type="file" id='file' name='file' model="ctrl.fileInfo.file" placeholder='Choose file' /> </form>
Lors d'un événement de clic sur un bouton, obtenez un fichier de type d'entrée à l'aide de l'identifiant et créez les données de ce formulaire
echo "<pre>"; print_r($_FILES);
Et sur le serveur:
// On button click event $('#upload').on('click', function() { var file_data = $('#fileToUpload').prop('files')[0]; var form_data = new FormData(); form_data.append('file', file_data); $.ajax({ url: 'server_file.php', dataType: 'json', cache: false, contentType: false, processData: false, data: form_data, type: 'post', beforeSend: function (){ // ... }, success: function(response){ console.log(response); }, error: function(response){ var response = response.responseJSON; console.log(response); } }); });
C'est pour le framework laravel mais la requête ajax est la même partout, je voulais juste vous montrer qu'une fois que vous avez inclus enctype = "mulitpart / form-data"
dans votre balise form. Et puis vous avez également utilisé le tableau comme des crochets. comme le fichier name = "file []"
, alors ne faites rien d'autre, je veux dire qu'il vous donne tous les fichiers avec des index de tableau. Et dans ce cas, je ne suis confronté à aucune erreur de taille maximale de fichier, etc. C'est juste pour votre aide.
$(document).on('click','#hide_btn', function(e){ e.preventDefault(); var formData = new FormData(this.form); //$.ajaxSetup({ // headers: { // 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), // } //}); $.ajax({ method: 'POST', url: '{{ route("visa.store") }}', cache: false, contentType: false, processData: false, data: formData, success: function(data){ console.log(data); }, error: function(data){ console.log(data); } }); });
Commentaire supprimé. Je n'ai pas réussi à lire . Merci @MagnusEriksson
Augmentez upload_max_filesize = 1M et post_max_size = 2M
@Lewis - Vous pouvez le voir dans le vidage du tableau
$ _FILES
. Ils obtiennent le code d'erreur3
, ce qui signifie que le fichier n'a été que partiellement téléchargé.Cela signifie exactement à quoi cela ressemble. Le fichier complet n'a pas été téléchargé. Si c'était à cause de la limite de taille, le code d'erreur aurait été
1
- "le fichier dépasse la directive upload_max_filesize dans php.ini" . Vous pouvez trouver les codes d'erreur et leur signification dans le manuel < / a>Comment puis-je résoudre ce problème? @MagnusEriksson