2017-10-01 4 views
0

Ich habe ein Bild-Upload-Formular, wo Sie auf "Bild auswählen" klicken und es öffnet das Dateiauswahlfenster. Sie wählen ein Bild und dann erscheint der Dateiname auf dem Bildschirm (nicht das Bild noch, nur der Dateiname) neben einem neu erschienenen "Hochladen" Knopf. Dann müssen Sie auf "Hochladen" klicken, damit das Bild wirklich hochgeladen und im Vorschaufenster angezeigt wird.Wie lade ich das Bild sofort hoch, nachdem die Datei ausgewählt wurde, anstatt den Benutzer zum Klicken auf die separate Schaltfläche "Hochladen" zu zwingen?

Ich würde gerne diesen Prozess zu verdichten, so dass, wenn jemand auf "Bild auswählen" klickt und das Bild, das sie hochladen möchten, entfernt den mittleren Mann und lädt das Bild sofort und zeigt ihnen das Bild im Vorschaufenster. Warum muss der Benutzer auf "Hochladen" klicken?

Ich habe meinen zugehörigen Code unten eingefügt. Gibt es eine Möglichkeit, meinen vorhandenen Code zu optimieren, damit der Upload-Teil unmittelbar nach der Dateiauswahl ausgeführt wird? Oder muss ich wahrscheinlich von vorne anfangen, um zu tun, was ich will?

Bild-Upload-Formular:

<li class="section"> 
      <label class="caption" for="">Pool Image </label> (OPTIONAL - You can add one later if you don't have one now)<br>   
      <div id="preview"><img id="image" src="images/no-image.png" /></div> 
      <label for="uploadImage" id="custom-file-upload"> 
       Choose Image 
      </label> 
      <span id="file-selected"></span> 
      <input id="uploadImage" type="file" accept="image/*" name="image" /> 
      <input id="button" type="button" value="Upload" class="displaynone webkit"> 
      <input id="remove-image" class="displaynone" type="button" value="Remove/Change"> 
      <div id="err"></div> 
      </li> 
      <li class="section"> 
      <a class="goback" id="cancel-and-remove-image" href='/my-pools'>&laquo; Cancel</a> 
      <input type="submit" name="submit" class="submit" value="Create Pool &raquo;" /> 
      </li> 

Diese JS ist auch auf der Seite:

$(document).ready(function() { 
    $("input:file").change(function(){ 
     $("#button").show(); 
    }); 

$('#uploadImage').on('change', function() { var fileName = ''; fileName = $(this).val(); $('#file-selected').html(fileName); }); 

$("#button").click(function(){ 
    var imageData = new FormData(); 
    imageData.append('image', $('#uploadImage')[0].files[0]); 

    //Make ajax call here: 
    $.ajax({ 
      url: '/upload-image-ajax.php', 
      type: 'POST', 
      processData: false, // important 
      contentType: false, // important 
      data: imageData, 
      beforeSend : function() { 
      $("#err").fadeOut(); 
      }, 
     success: function(result) { 
      if(result=='invalid file') { 
      // invalid file format. 
      $("#err").html("Invalid File. Image must be JPEG, PNG or GIF.").fadeIn(); 
      } else { 

      // view uploaded file. 
      $("#image").attr('src', '/'+result); 
      /* $("#preview").html(data).fadeIn();*/ 
      /* $("#form")[0].reset(); */ 
      //show the remove image button 
      $('#file-selected').empty(); 
      $("#remove-image").show(); 
      $("#custom-file-upload").hide(); 
      $("#uploadImage").hide(); 
      $("#button").hide(); 
      } 
      }, 
     error: function(result) { 
       $("#err").html("errorcity").fadeIn(); 
      }  
    }); 
    }); 

    $("#remove-image").click(function(){ 
    //Make ajax call here: 
    $.ajax({ 
      url: "/remove-image.php", 
      type: 'POST', 
      processData: false, // important 
      contentType: false, // important 
     success: function(result) { 
      if(result=='gone') { 
      $("#image").attr('src', '/images/no-image.png'); 
      $('#file-selected').empty(); 
      $("#custom-file-upload").show(); 
      $("#remove-image").hide(); 
      $("#uploadImage").hide(); 
      $("#button").hide(); 
      } else { 
       $("#err").html("sorry"+result).fadeIn(); 
      } 
      }, 
     error: function(result) { 
       $("#err").html("error").fadeIn(); 
      }  
    }); 
    }); 

    }); 

Dies ist der PHP-Skript, die AJAX-Aufrufe (dh upload-image-ajax.php):

<?php 
require_once("includes/session.php"); 
$poolid=strtolower($_SESSION['poolid']); //lowercase it first so we get exact matches 
$valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions 

if(isset($_FILES['image'])) { 
    $img = $_FILES['image']['name']; 
    $tmp = $_FILES['image']['tmp_name']; 

    // get uploaded file's extension 
    $ext = strtolower(pathinfo($img, PATHINFO_EXTENSION)); 

    //checking if image exists for this pool and removing if so, before adding new image in its place 
    if(file_exists("uploads/".$poolid.".png")) { 
    unlink("uploads/".$poolid.".png"); 
    } 

    // checks valid format 
    if(in_array($ext, $valid_extensions)) { 
    //re-size the image and make it a PNG before sending to server 
    $final_image = $poolid . ".png"; 
    $path = "uploads/".strtolower($final_image); 
    $size = getimagesize($tmp); 
    $ratio = $size[0]/$size[1]; // width/height 
    if($ratio > 1) { 
     $width = 200; 
     $height = 200/$ratio; 
    } 
    else { 
     $width = 200*$ratio; 
     $height = 200; 
    } 
    $src = imagecreatefromstring(file_get_contents($tmp)); 
    $dst = imagecreatetruecolor($width,$height); 
    imagecopyresampled($dst,$src,0,0,0,0,$width,$height,$size[0],$size[1]); 
    imagedestroy($src); 
    imagepng($dst, $path); // adjust format as needed 
    imagedestroy($dst); 
    $_SESSION['image_uploaded']="yes"; 
    echo $path ."?".rand(1,32000); 
    } else { 
     echo 'invalid file'; 
    } 
} 
?> 

Antwort

1

Fügen Sie einfach Ihren Bildupload AJAX Aufruf in den Dateieingang 10 e Entlüftung. Dies sollte Ihr Bild hochladen, direkt nachdem der Benutzer das Bild ausgewählt hat.

$(document).ready(function() { 
 

 
    $('#uploadImage').on('change', function() { 
 

 
    var fileName = ''; 
 
    fileName = $(this).val(); 
 
    $('#file-selected').html(fileName); 
 

 

 
    var imageData = new FormData(); 
 
    imageData.append('image', $('#uploadImage')[0].files[0]); 
 

 
    //Make ajax call here: 
 
    $.ajax({ 
 
     url: '/upload-image-ajax.php', 
 
     type: 'POST', 
 
     processData: false, // important 
 
     contentType: false, // important 
 
     data: imageData, 
 
     beforeSend: function() { 
 
     $("#err").fadeOut(); 
 
     }, 
 
     success: function(result) { 
 
     if (result == 'invalid file') { 
 
      // invalid file format. 
 
      $("#err").html("Invalid File. Image must be JPEG, PNG or GIF.").fadeIn(); 
 
     } else { 
 

 
      // view uploaded file. 
 
      $("#image").attr('src', '/' + result); 
 
      /* $("#preview").html(data).fadeIn();*/ 
 
      /* $("#form")[0].reset(); */ 
 
      //show the remove image button 
 
      $('#file-selected').empty(); 
 
      $("#remove-image").show(); 
 
      $("#custom-file-upload").hide(); 
 
      $("#uploadImage").hide(); 
 
      $("#button").hide(); 
 
     } 
 
     }, 
 
     error: function(result) { 
 
     $("#err").html("errorcity").fadeIn(); 
 
     } 
 
    }); 
 

 
    }); 
 

 
});

1

Sie können eine Funktion aufrufen, die mit entweder Ajax tun, so wird oder ein Ereignis vorlegen den aufrufen Form.

diese Funktion aufrufen, setzen ein onchange Ereignis in der Datei/img-Tag (nur Verwendung img wenn img die Vorschau des ausgewählten Bildes zu zeigen, verwendet wird)

Code

Verwandte Themen