jQuery AJAX télécharger PHP

je veux implémenter un téléchargement de fichier simple dans ma page intranet, avec la plus petite configuration possible.

C'est ma partie HTML:

<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>

et voici mon script jQuery:

$("#upload").on("click", function() {
    var file_data = $("#sortpicture").prop("files")[0];   
    var form_data = new FormData();
    form_data.append("file", file_data);
    alert(form_data);
    $.ajax({
        url: "/uploads",
        dataType: 'script',
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,                         
        type: 'post',
        success: function(){
            alert("works"); 
        }
    });
});

il y a un dossier nommé" uploads "dans le répertoire racine du site, avec permissions de changement pour" users "et"IIS_users".

lorsque je sélectionne un fichier avec le fichier-form et que j'appuie sur le bouton "upload", la première alerte renvoie "[object FormData]". la seconde alerte n'est pas appelée et le dossier"téléchargements" est vide!?

Quelqu'un peut-il m'aider à découvrir ce qui ne va pas?

la prochaine étape devrait également être, de renommer le fichier avec un nom généré côté serveur. Peut-être que quelqu'un peut me donner une solution pour ça aussi.

124
demandé sur Basti 2014-06-01 18:11:23

5 réponses

Vous avez besoin d'un script qui s'exécute sur le serveur pour déplacer le fichier vers le répertoire uploads. La méthode jQuery ajax (en cours d'exécution dans le navigateur) envoie les données du formulaire au serveur, puis un script sur le serveur gère le téléchargement. Voici un exemple D'utilisation de PHP.

votre HTML est très bien, mais mettez à jour votre script jQuery JS pour ressembler à ceci:

$('#upload').on('click', function() {
    var file_data = $('#sortpicture').prop('files')[0];   
    var form_data = new FormData();                  
    form_data.append('file', file_data);
    alert(form_data);                             
    $.ajax({
        url: 'upload.php', // point to server-side PHP script 
        dataType: 'text',  // what to expect back from the PHP script, if anything
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,                         
        type: 'post',
        success: function(php_script_response){
            alert(php_script_response); // display response from the PHP script, if any
        }
     });
});

et maintenant pour le script côté serveur, en utilisant PHP dans ce cas.

télécharger.php : un script PHP qui tourne sur le serveur et dirige le fichier vers le répertoire de téléchargement:

<?php

    if ( 0 < $_FILES['file']['error'] ) {
        echo 'Error: ' . $_FILES['file']['error'] . '<br>';
    }
    else {
        move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
    }

?>

aussi, quelques choses sur le répertoire de destination:

  1. assurez-vous d'avoir le chemin correct du serveur , c'est-à-dire, à partir de L'emplacement du script PHP Quel est le chemin vers le répertoire de téléchargement, et
  2. assurez-vous que c'est writable .

et un petit peu sur la fonction PHP move_uploaded_file , utilisé dans le téléchargement .php script:

move_uploaded_file(

    // this is where the file is temporarily stored on the server when uploaded
    // do not change this
    $_FILES['file']['tmp_name'],

    // this is where you want to put the file and what you want to name it
    // in this case we are putting in a directory called "uploads"
    // and giving it the original filename
    'uploads/' . $_FILES['file']['name']
);

$_FILES['file']['name'] est le nom du fichier tel qu'il est téléchargé. Vous n'avez pas à l'utiliser. Vous pouvez donner au fichier n'importe quel nom (compatible avec le système de fichiers du serveur) que vous voulez:

move_uploaded_file(
    $_FILES['file']['tmp_name'],
    'uploads/my_new_filename.whatever'
);

et enfin, soyez conscient de votre PHP upload_max_filesize et post_max_size les valeurs de configuration, et assurez-vous que vos fichiers de test ne dépassent pas l'une ou l'autre. Voici de l'aide comment vous vérifiez la configuration de PHP et comment vous mettez max filesize et post paramètres .

212
répondu bloodyKnuckles 2018-02-23 00:53:57
var formData = new FormData($("#YOUR_FORM_ID")[0]);
$.ajax({
    url: "upload.php",
    type: "POST",
    data : formData,
    processData: false,
    contentType: false,
    beforeSend: function() {

    },
    success: function(data){




    },
    error: function(xhr, ajaxOptions, thrownError) {
       console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
    }
});
1
répondu Azhar 2017-04-28 14:00:46

et c'est le fichier php pour recevoir les fichiers uplaoded

<?
$data = array();
    //check with your logic
    if (isset($_FILES)) {
        $error = false;
        $files = array();

        $uploaddir = $target_dir;
        foreach ($_FILES as $file) {
            if (move_uploaded_file($file['tmp_name'], $uploaddir . basename( $file['name']))) {
                $files[] = $uploaddir . $file['name'];
            } else {
                $error = true;
            }
        }
        $data = ($error) ? array('error' => 'There was an error uploading your files') : array('files' => $files);
    } else {
        $data = array('success' => 'NO FILES ARE SENT','formData' => $_REQUEST);
    }

    echo json_encode($data);
?>
0
répondu kavehmb 2017-10-24 14:58:19
**1. index.php**
<body>
    <span id="msg" style="color:red"></span><br/>
    <input type="file" id="photo"><br/>
  <script type="text/javascript" src="jquery-3.2.1.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function(){
      $(document).on('change','#photo',function(){
        var property = document.getElementById('photo').files[0];
        var image_name = property.name;
        var image_extension = image_name.split('.').pop().toLowerCase();

        if(jQuery.inArray(image_extension,['gif','jpg','jpeg','']) == -1){
          alert("Invalid image file");
        }

        var form_data = new FormData();
        form_data.append("file",property);
        $.ajax({
          url:'upload.php',
          method:'POST',
          data:form_data,
          contentType:false,
          cache:false,
          processData:false,
          beforeSend:function(){
            $('#msg').html('Loading......');
          },
          success:function(data){
            console.log(data);
            $('#msg').html(data);
          }
        });
      });
    });
  </script>
</body>

**2.upload.php**
<?php
if($_FILES['file']['name'] != ''){
    $test = explode('.', $_FILES['file']['name']);
    $extension = end($test);    
    $name = rand(100,999).'.'.$extension;

    $location = 'uploads/'.$name;
    move_uploaded_file($_FILES['file']['tmp_name'], $location);

    echo '<img src="'.$location.'" height="100" width="100" />';
}
0
répondu Hasib Kamal 2017-12-21 05:26:48

Le Meilleur Du Téléchargement De Fichier À L'Aide De Jquery Ajax Avec Materialise Cliquez ici pour télécharger

lorsque vous sélectionnez image, l'image sera convertie en base 64 et vous pouvez la stocker dans la base de données afin qu'elle soit légère aussi.

-1
répondu Urshit Sheth 2017-06-21 10:18:50