So erstellen Sie einen einfachen Bild-Upload mit Javascript / HTML

70

Weiß jemand, wie man einen einfachen Bild-Upload durchführt und ihn auf der Seite anzeigt?

Das ist was ich suche.

  • Der Benutzer (ich) wählt ein Bild aus
  • Die Seite zeigt das Bild an, ohne die Seite zu aktualisieren oder zu einer anderen Datei zu wechseln.
  • Mehrere <img src>reichen aus, weil ich unterschiedliche Bildgrößen anzeigen muss.

Das war mein Code. (Einige davon sind bearbeitet, ich habe es von hier bekommen )

<style>
    /* Image Designing Propoerties */
    .thumb {
        height: 75px;
        border: 1px solid #000;
        margin: 10px 5px 0 0;
    }
</style>

<script type="text/javascript">
    /* The uploader form */
    $(function () {
        $(":file").change(function () {
            if (this.files && this.files[0]) {
                var reader = new FileReader();

                reader.onload = imageIsLoaded;
                reader.readAsDataURL(this.files[0]);
            }
        });
    });

    function imageIsLoaded(e) {
        $('#myImg').attr('src', e.target.result);
        $('#yourImage').attr('src', e.target.result);
    };

</script>


<input type='file' />
</br><img id="myImg" src="#" alt="your image" height=200 width=100>
user3335903
quelle
Haben Sie versucht, ein Plugin / eine Bibliothek dafür zu verwenden? Zum Beispiel Dropzone .
Aroth
Ich glaube, ich brauche es jetzt nicht.
@aroth. Wissen Sie, was das Problem mit diesem Code zu sein scheint? Warum erscheint mein Bild nicht?
3
Der Code wirft Fehler wie geschrieben aus. Nach dem Aufräumen funktioniert es gut für mich. Siehe: jsfiddle.net/bPUkC/2 . Beachten Sie auch, dass das Bild zwar auf der Seite angezeigt wird, das Bild jedoch nicht hochgeladen wird.
aroth
Es sieht gut aus zu sehen, um zu arbeiten. Aber als ich versuchte, es zu kopieren und in meinen Editor einzufügen, und versuchte, danach zu suchen. Bei mir hat es nicht funktioniert. :(

Antworten:

50

Hier ist ein einfaches Beispiel ohne jQuery. Verwenden Sie URL.createObjectURL, welche

Erstellt einen DOMString mit einer URL, die das im Parameter angegebene Objekt darstellt

Dann können Sie einfach srcdas Bild auf diese URL einstellen :

window.addEventListener('load', function() {
  document.querySelector('input[type="file"]').addEventListener('change', function() {
      if (this.files && this.files[0]) {
          var img = document.querySelector('img');  // $('img')[0]
          img.src = URL.createObjectURL(this.files[0]); // set src to blob url
          img.onload = imageIsLoaded;
      }
  });
});

function imageIsLoaded() { 
  alert(this.src);  // blob url
  // update width and height ...
}
<input type='file' />
<br><img id="myImg" src="#" alt="your image" height=200 width=100>

clabe45
quelle
1
Funktioniert mit reagieren auch und wirklich einfache Lösung
Bhaumik Bhatt
Es wird empfohlen, den Onload-Ereignis-Listener anzuhängen, bevor Sie die Quelle für das Image festlegen.
vrugtehagel
11

Versuchen Sie dies. Es unterstützt das Hochladen mehrerer Dateien.

$('#multi_file_upload').change(function(e) {
    var file_id = e.target.id;

    var file_name_arr = new Array();
    var process_path = site_url + 'public/uploads/';

    for (i = 0; i < $("#" + file_id).prop("files").length; i++) {

        var form_data = new FormData();
        var file_data = $("#" + file_id).prop("files")[i];
        form_data.append("file_name", file_data);

        if (check_multifile_logo($("#" + file_id).prop("files")[i]['name'])) {
            $.ajax({
                //url         :   site_url + "inc/upload_image.php?width=96&height=60&show_small=1",
                url: site_url + "inc/upload_contact_info.php",
                cache: false,
                contentType: false,
                processData: false,
                async: false,
                data: form_data,
                type: 'post',
                success: function(data) {
                    // display image
                }
            });
        } else {
            $("#" + html_div).html('');
            alert('We only accept JPG, JPEG, PNG, GIF and BMP files');
        }

    }
});

function check_multifile_logo(file) {
    var extension = file.substr((file.lastIndexOf('.') + 1))
    if (extension === 'jpg' || extension === 'jpeg' || extension === 'gif' || extension === 'png' || extension === 'bmp') {
        return true;
    } else {
        return false;
    }
}

Hier ist #multi_file_upload die ID des Bild-Upload-Felds.

HB Kautil
quelle
Vielen Dank dafür, aber ich brauche einen Javascript-Code, nicht PHP.
Ich muss das Bild nur 4x in verschiedenen Größen anzeigen, ich habe nur Probleme mit meinem, srcaber danke dafür. Ich werde es später versuchen. : D
Sie können das Bild vom Ajax-Aufruf zurückgeben. In meinem Beispiel upload_contact_info.php. Sie erhalten also einen Bildnamen in einer Ajax-Antwort, dann müssen Sie ein dynamisches Bild erstellen. Das ist es.
HB Kautil
Das ist lächerlich, aber ich habe keine Ahnung, wie ich Ihren geposteten Code verwenden kann. Haha! Aber ich werde einfach daran arbeiten.
@HBKautil, wo ist der Rest des Codes? Wo ist der HTML-Teil?
Schwarz
0
<li class="list-group-item active"><h5>Feaured Image</h5></li>
            <li class="list-group-item">
                <div class="input-group mb-3">
                    <div class="custom-file ">
                        <input type="file"  class="custom-file-input" name="thumbnail" id="thumbnail">
                        <label class="custom-file-label" for="thumbnail">Choose file</label>
                    </div>
                </div>
                <div class="img-thumbnail  text-center">
                    <img src="@if(isset($product)) {{asset('storage/'.$product->thumbnail)}} @else {{asset('images/no-thumbnail.jpeg')}} @endif" id="imgthumbnail" class="img-fluid" alt="">
                </div>
            </li>
<script>
$(function(){
$('#thumbnail').on('change', function() {
    var file = $(this).get(0).files;
    var reader = new FileReader();
    reader.readAsDataURL(file[0]);
    reader.addEventListener("load", function(e) {
    var image = e.target.result;
$("#imgthumbnail").attr('src', image);
});
});
}
</script>
MOAZZAM RASOOL
quelle
1
Bitte fügen Sie eine Erklärung hinzu, warum Ihre Antwort hilfreicher ist als bereits vorhandene Antworten. Vermeiden Sie außerdem generell Nur-Code-Antworten.
Gaganshera
0
<img id="output_image" height=50px width=50px\
<input type="file" accept="image/*" onchange="preview_image(event)">

<script type"text/javascript">
  function preview_image(event) {
    var reader = new FileReader();
    reader.onload = function(){
      var output = document.getElementById('output_image');
      output.src = reader.result;
    }
    reader.readAsDataURL(event.target.files[0]);
  }
</script>
Axel Jorgensen
quelle
7
Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, warum und wie dieser Code funktioniert. Nur-Code-Antworten sind nicht sehr nützlich und können zu einer Frachtkult-Programmierung führen .
Max Vollmer