Anteprima di un'immagine prima che venga caricata


1615

Voglio essere in grado di visualizzare in anteprima un file (immagine) prima che venga caricato. L'azione di anteprima deve essere eseguita tutto nel browser senza utilizzare Ajax per caricare l'immagine.

Come posso fare questo?


Tieni presente che, a meno che tu non utilizzi Gears o un altro plug-in, non puoi manipolare l'immagine all'interno del browser: code.google.com/p/chromium/issues/detail?id=32276
Steve-o

Dai un'occhiata a questo puro approccio JavaScript, compresa la sua risposta e il commento di Ray Nicholus per la soluzione finale: stackoverflow.com/questions/16430016/…
Jonathan Root,

Ecco un bell'articolo dettagliato con demo live codepedia.info/2015/06/…
Satinder singh,

8
Ecco una soluzione semplice che non utilizza jquery: developer.mozilla.org/en-US/docs/Web/API/FileReader/…
John Gilmer,

Risposte:


2536

Dai un'occhiata al seguente codice di esempio:

function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();
    
    reader.onload = function(e) {
      $('#blah').attr('src', e.target.result);
    }
    
    reader.readAsDataURL(input.files[0]); // convert to base64 string
  }
}

$("#imgInp").change(function() {
  readURL(this);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form runat="server">
  <input type='file' id="imgInp" />
  <img id="blah" src="#" alt="your image" />
</form>

Inoltre, puoi provare questo esempio qui .


5
Puoi migliorare un po 'le prestazioni definendo il lettore una volta. jsfiddle.net/LvsYc/638
Jaider

84
Perché usare jQuery per `$ ('# blah'). Attr ('src', e.target.result);` quando avresti potuto semplicemente farlodocument.getElementById('blah').src=e.target.result)
EasyBB

4
Ho realizzato un'implementazione di ReactJS di questo . Funziona come un fascino. @kxc dovresti effettuare una chiamata Ajax e inviare input.files[0]come dati, vedi il documento di jQuery .
Sumi Straessle

@IvanBaev input.files[0]non ha il percorso completo. In che modo FileReader individua il file?
Old Geezer,

4
Non importa, ogni volta che non puoi usare jquery perché è gonfio e la vaniglia ti darà risultati più veloci soprattutto se hai tonnellate di script.
EasyBB

357

Ci sono un paio di modi in cui puoi farlo. Il modo più efficiente sarebbe usare URL.createObjectURL () sul File dal tuo <input> . Passa questo URL a img.src per dire al browser di caricare l'immagine fornita.

Ecco un esempio:

<input type="file" accept="image/*" onchange="loadFile(event)">
<img id="output"/>
<script>
  var loadFile = function(event) {
    var output = document.getElementById('output');
    output.src = URL.createObjectURL(event.target.files[0]);
    output.onload = function() {
      URL.revokeObjectURL(output.src) // free memory
    }
  };
</script>

Puoi anche utilizzare FileReader.readAsDataURL () per analizzare il file dal tuo <input>. Ciò creerà una stringa in memoria contenente una rappresentazione base64 dell'immagine.

<input type="file" accept="image/*" onchange="loadFile(event)">
<img id="output"/>
<script>
  var loadFile = function(event) {
    var reader = new FileReader();
    reader.onload = function(){
      var output = document.getElementById('output');
      output.src = reader.result;
    };
    reader.readAsDataURL(event.target.files[0]);
  };
</script>


40
Leggere attentamente: readAsDataURL e createObjectURL memorizzeranno nella cache un'immagine nel browser, quindi restituiranno una stringa codificata base64 che fa riferimento alla posizione dell'immagine nella cache. Se la cache del browser viene cancellata, la stringa codificata in base64 non farà più riferimento all'immagine. La stringa base64 non è dati immagine reali, è un riferimento url all'immagine e non dovresti salvarla in un database sperando di recuperare i dati immagine. Di recente ho commesso questo errore (circa 3 minuti fa).
tfmontague,

9
per evitare problemi di memoria che dovresti chiamare URL.revokeObjectURLquando hai finito con il tuo BLOB
Apolo

@Apolo non in questo caso, vedere questa risposta: stackoverflow.com/a/49346614/2313004
grreeenn

Prova la tua soluzione .... grazie
Ajay Kumar

219

Soluzione a una fodera:

Il codice seguente utilizza gli URL degli oggetti, che è molto più efficiente dell'URL dei dati per la visualizzazione di immagini di grandi dimensioni (Un URL dei dati è una stringa enorme contenente tutti i dati del file, mentre un URL dell'oggetto è solo una breve stringa che fa riferimento ai dati del file in memoria):

<img id="blah" alt="your image" width="100" height="100" />

<input type="file" 
    onchange="document.getElementById('blah').src = window.URL.createObjectURL(this.files[0])">

L'URL generato sarà come:

blob:http%3A//localhost/7514bc74-65d4-4cf0-a0df-3de016824345

2
@Raptor e così l'intera API del file ... ( FileReader, input.filesecc.) URL.createObjectURLÈ la strada da percorrere quando si tratta di file inviati dall'utente, crea solo un collegamento simbolico in memoria al file reale sul disco dell'utente.
Kaiido,

@cnlevy Come possiamo accedere ai file caricati? È possibile ottenerlo solo dall'URL come hai menzionato? Per essere precisi, sto usando il pallone che supporta già l'accesso ai file caricati. C'è qualche altro modo con questo one-liner?
Abhishek Singh,

questa è la migliore risposta di sempre
Navid Farjad,

Questa soluzione non ha funzionato per me. Anteprima dell'immagine non visualizzata.
Sundaramoorthy J

Migliore risposta! Grazie
A7madev

46

La risposta di LeassTaTT funziona bene nei browser "standard" come FF e Chrome. La soluzione per IE esiste ma sembra diversa. Ecco la descrizione della soluzione cross-browser:

In HTML sono necessari due elementi di anteprima, imgper i browser standard e divper IE

HTML:

<img id="preview" 
     src="" 
     alt="" 
     style="display:none; max-width: 160px; max-height: 120px; border: none;"/>

<div id="preview_ie"></div>

Nel CSS specifichiamo la seguente cosa specifica di IE:

CSS:

#preview_ie {
  FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)
}  

In HTML includiamo i Javascripts standard e specifici di IE:

<script type="text/javascript">
  {% include "pic_preview.js" %}
</script>  
<!--[if gte IE 7]> 
<script type="text/javascript">
  {% include "pic_preview_ie.js" %}
</script>

Il pic_preview.jsè il Javascript dalla risposta del LeassTaTT. Sostituisci $('#blah')con il $('#preview')e aggiungi il$('#preview').show()

Ora il Javascript specifico di IE (pic_preview_ie.js):

function readURL (imgFile) {    
  var newPreview = document.getElementById('preview_ie');
  newPreview.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgFile.value;
  newPreview.style.width = '160px';
  newPreview.style.height = '120px';
}    

Questo è. Funziona in IE7, IE8, FF e Chrome. Si prega di testare in IE9 e segnalare. L'idea dell'anteprima di IE è stata trovata qui: http://forums.asp.net/t/1320559.aspx

http://msdn.microsoft.com/en-us/library/ms532969(v=vs.85).aspx


24

Ho modificato la risposta di @ Ivan per visualizzare l'immagine "Nessuna anteprima disponibile", se non è un'immagine:

function readURL(input) {
    var url = input.value;
    var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
    if (input.files && input.files[0]&& (ext == "gif" || ext == "png" || ext == "jpeg" || ext == "jpg")) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $('.imagepreview').attr('src', e.target.result);
        }

        reader.readAsDataURL(input.files[0]);
    }else{
         $('.imagepreview').attr('src', '/assets/no_preview.png');
    }
}

19

Ecco una versione a più file , basata sulla risposta di Ivan Baev.

HTML

<input type="file" multiple id="gallery-photo-add">
<div class="gallery"></div>

JavaScript / jQuery

$(function() {
    // Multiple images preview in browser
    var imagesPreview = function(input, placeToInsertImagePreview) {

        if (input.files) {
            var filesAmount = input.files.length;

            for (i = 0; i < filesAmount; i++) {
                var reader = new FileReader();

                reader.onload = function(event) {
                    $($.parseHTML('<img>')).attr('src', event.target.result).appendTo(placeToInsertImagePreview);
                }

                reader.readAsDataURL(input.files[i]);
            }
        }

    };

    $('#gallery-photo-add').on('change', function() {
        imagesPreview(this, 'div.gallery');
    });
});

Richiede jQuery 1.8 a causa dell'utilizzo di $ .parseHTML, che dovrebbe aiutare con la mitigazione XSS.

Questo funzionerà immediatamente e l'unica dipendenza di cui hai bisogno è jQuery.


16

Sì. È possibile.

html

<input type="file" accept="image/*"  onchange="showMyImage(this)" />
 <br/>
<img id="thumbnil" style="width:20%; margin-top:10px;"  src="" alt="image"/>

JS

 function showMyImage(fileInput) {
        var files = fileInput.files;
        for (var i = 0; i < files.length; i++) {           
            var file = files[i];
            var imageType = /image.*/;     
            if (!file.type.match(imageType)) {
                continue;
            }           
            var img=document.getElementById("thumbnil");            
            img.file = file;    
            var reader = new FileReader();
            reader.onload = (function(aImg) { 
                return function(e) { 
                    aImg.src = e.target.result; 
                }; 
            })(img);
            reader.readAsDataURL(file);
        }    
    }

Puoi ottenere Demo live da qui.


11

JSfiddle pulito e semplice

Questo sarà utile quando vuoi che l'evento venga attivato indirettamente da un div o un pulsante.

<img id="image-preview"  style="height:100px; width:100px;"  src="" >

<input style="display:none" id="input-image-hidden" onchange="document.getElementById('image-preview').src = window.URL.createObjectURL(this.files[0])" type="file" accept="image/jpeg, image/png">

<button  onclick="HandleBrowseClick('input-image-hidden');" >UPLOAD IMAGE</button>


<script type="text/javascript">
function HandleBrowseClick(hidden_input_image)
{
    var fileinputElement = document.getElementById(hidden_input_image);
    fileinputElement.click();
}     
</script>

Solo una nota: non posso prendermi il merito per questo, ma puoi usare <label>ed evitare javascript per gestire del tutto il clic del pulsante. Attiva input di file con HTML / CSS puri. e non è affatto confuso.
Regolare Joe,

7

Esempio con più immagini utilizzando JavaScript (jQuery) e HTML5

JavaScript (jQuery)

function readURL(input) {
     for(var i =0; i< input.files.length; i++){
         if (input.files[i]) {
            var reader = new FileReader();

            reader.onload = function (e) {
               var img = $('<img id="dynamic">');
               img.attr('src', e.target.result);
               img.appendTo('#form1');  
            }
            reader.readAsDataURL(input.files[i]);
           }
        }
    }

    $("#imgUpload").change(function(){
        readURL(this);
    });
}

Markup (HTML)

<form id="form1" runat="server">
    <input type="file" id="imgUpload" multiple/>
</form>

5

Che ne dite di creare una funzione che carica il file e genera un evento personalizzato. Quindi collegare un ascoltatore all'input. In questo modo abbiamo una maggiore flessibilità nell'uso del file, non solo per l'anteprima delle immagini.

/**
 * @param {domElement} input - The input element
 * @param {string} typeData - The type of data to be return in the event object. 
 */
function loadFileFromInput(input,typeData) {
    var reader,
        fileLoadedEvent,
        files = input.files;

    if (files && files[0]) {
        reader = new FileReader();

        reader.onload = function (e) {
            fileLoadedEvent = new CustomEvent('fileLoaded',{
                detail:{
                    data:reader.result,
                    file:files[0]  
                },
                bubbles:true,
                cancelable:true
            });
            input.dispatchEvent(fileLoadedEvent);
        }
        switch(typeData) {
            case 'arraybuffer':
                reader.readAsArrayBuffer(files[0]);
                break;
            case 'dataurl':
                reader.readAsDataURL(files[0]);
                break;
            case 'binarystring':
                reader.readAsBinaryString(files[0]);
                break;
            case 'text':
                reader.readAsText(files[0]);
                break;
        }
    }
}
function fileHandler (e) {
    var data = e.detail.data,
        fileInfo = e.detail.file;

    img.src = data;
}
var input = document.getElementById('inputId'),
    img = document.getElementById('imgId');

input.onchange = function (e) {
    loadFileFromInput(e.target,'dataurl');
};

input.addEventListener('fileLoaded',fileHandler)

Probabilmente il mio codice non è buono come alcuni utenti, ma penso che ne otterrai il punto. Qui puoi vedere un esempio


5

Di seguito è riportato il codice di lavoro.

<input type='file' onchange="readURL(this);" /> 
<img id="ShowImage" src="#" />

Javascript:

 function readURL(input) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();

            reader.onload = function (e) {
                $('#ShowImage')
                    .attr('src', e.target.result)
                    .width(150)
                    .height(200);
            };

            reader.readAsDataURL(input.files[0]);
        }
    }

4

In React, se il file è nei tuoi oggetti di scena, puoi usare:

{props.value instanceof File && (
    <img src={URL.createObjectURL(props.value)}/>
)}

1
Questo mi ha salvato la vita! Molto più semplice della soluzione React usando FileReader
Jonathan il

2

E questa soluzione?

Aggiungi l'attributo di dati "data-type = editable" a un tag immagine come questo:

<img data-type="editable" id="companyLogo" src="http://www.coventrywebgraphicdesign.co.uk/wp-content/uploads/logo-here.jpg" height="300px" width="300px" />

E la sceneggiatura del tuo progetto ovviamente ...

function init() {
    $("img[data-type=editable]").each(function (i, e) {
        var _inputFile = $('<input/>')
            .attr('type', 'file')
            .attr('hidden', 'hidden')
            .attr('onchange', 'readImage()')
            .attr('data-image-placeholder', e.id);

        $(e.parentElement).append(_inputFile);

        $(e).on("click", _inputFile, triggerClick);
    });
}

function triggerClick(e) {
    e.data.click();
}

Element.prototype.readImage = function () {
    var _inputFile = this;
    if (_inputFile && _inputFile.files && _inputFile.files[0]) {
        var _fileReader = new FileReader();
        _fileReader.onload = function (e) {
            var _imagePlaceholder = _inputFile.attributes.getNamedItem("data-image-placeholder").value;
            var _img = $("#" + _imagePlaceholder);
            _img.attr("src", e.target.result);
        };
        _fileReader.readAsDataURL(_inputFile.files[0]);
    }
};

// 
// IIFE - Immediately Invoked Function Expression
// /programming/18307078/jquery-best-practises-in-case-of-document-ready
(

function (yourcode) {
    "use strict";
    // The global jQuery object is passed as a parameter
    yourcode(window.jQuery, window, document);
}(

function ($, window, document) {
    "use strict";
    // The $ is now locally scoped 
    $(function () {
        // The DOM is ready!
        init();
    });

    // The rest of your code goes here!
}));

Guarda la demo su JSFiddle


2

Prova questo

window.onload = function() {
  if (window.File && window.FileList && window.FileReader) {
    var filesInput = document.getElementById("uploadImage");
    filesInput.addEventListener("change", function(event) {
      var files = event.target.files;
      var output = document.getElementById("result");
      for (var i = 0; i < files.length; i++) {
        var file = files[i];
        if (!file.type.match('image'))
          continue;
        var picReader = new FileReader();
        picReader.addEventListener("load", function(event) {
          var picFile = event.target;
          var div = document.createElement("div");
          div.innerHTML = "<img class='thumbnail' src='" + picFile.result + "'" +
            "title='" + picFile.name + "'/>";
          output.insertBefore(div, null);
        });        
        picReader.readAsDataURL(file);
      }

    });
  }
}
<input type="file" id="uploadImage" name="termek_file" class="file_input" multiple/>
<div id="result" class="uploadPreview">


2

Visualizza l'anteprima di più immagini prima che vengano caricate utilizzando jQuery / javascript?

Ciò visualizzerà in anteprima più file alla volta come immagini in miniatura

html

<input id="ImageMedias" multiple="multiple" name="ImageMedias" type="file"
accept=".jfif,.jpg,.jpeg,.png,.gif" class="custom-file-input"  value="">                                    
<div id="divImageMediaPreview"></div>

copione

$("#ImageMedias").change(function () {
    if (typeof (FileReader) != "undefined") {
        var dvPreview = $("#divImageMediaPreview");
        dvPreview.html("");            
        $($(this)[0].files).each(function () {
            var file = $(this);                
                var reader = new FileReader();
                reader.onload = function (e) {
                    var img = $("<img />");
                    img.attr("style", "width: 150px; height:100px; padding: 10px");
                    img.attr("src", e.target.result);
                    dvPreview.append(img);
                }
                reader.readAsDataURL(file[0]);                
        });
    } else {
        alert("This browser does not support HTML5 FileReader.");
    }
});

Demo di lavoro su Codepen

Demo di lavoro su jsfiddle

Spero che questo possa aiutare.


1

Ho creato un plug-in che può generare l'effetto di anteprima in Internet Explorer 7+ grazie a Internet, ma presenta alcune limitazioni. L'ho inserito in una pagina github in modo che sia più facile ottenerlo

$(function () {
		$("input[name=file1]").previewimage({
			div: ".preview",
			imgwidth: 180,
			imgheight: 120
		});
		$("input[name=file2]").previewimage({
			div: ".preview2",
			imgwidth: 90,
			imgheight: 90
		});
	});
.preview > div {
  display: inline-block;
  text-align:center;
}

.preview2 > div {
  display: inline-block; 
  text-align:center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://rawgit.com/andrewng330/PreviewImage/master/preview.image.min.js"></script>
	Preview
	<div class="preview"></div>
	Preview2
	<div class="preview2"></div>

	<form action="#" method="POST" enctype="multipart/form-data">
		<input type="file" name="file1">
		<input type="file" name="file2">
		<input type="submit">
	</form>


1

Per il caricamento di più immagini (modifica alla soluzione @ IvanBaev)

function readURL(input) {
    if (input.files && input.files[0]) {
        var i;
        for (i = 0; i < input.files.length; ++i) {
          var reader = new FileReader();
          reader.onload = function (e) {
              $('#form1').append('<img src="'+e.target.result+'">');
          }
          reader.readAsDataURL(input.files[i]);
        }
    }
}

http://jsfiddle.net/LvsYc/12330/

Spero che questo aiuti qualcuno.


1

È il mio codice.Supporta IE [6-9] 、 chrome 17 + 、 firefox 、 Opera 11 + 、 Maxthon3

   
function previewImage(fileObj, imgPreviewId) {
    var allowExtention = ".jpg,.bmp,.gif,.png";  //allowed to upload file type
    document.getElementById("hfAllowPicSuffix").value;
    var extention = fileObj.value.substring(fileObj.value.lastIndexOf(".") + 1).toLowerCase();
    var browserVersion = window.navigator.userAgent.toUpperCase();
    if (allowExtention.indexOf(extention) > -1) {
        if (fileObj.files) {
            if (window.FileReader) {
                var reader = new FileReader();
                reader.onload = function (e) {
                    document.getElementById(imgPreviewId).setAttribute("src", e.target.result);
                };
                reader.readAsDataURL(fileObj.files[0]);
            } else if (browserVersion.indexOf("SAFARI") > -1) {
                alert("don't support  Safari6.0 below broswer");
            }
        } else if (browserVersion.indexOf("MSIE") > -1) {
            if (browserVersion.indexOf("MSIE 6") > -1) {//ie6
                document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
            } else {//ie[7-9]
                fileObj.select();
                fileObj.blur(); 
                var newPreview = document.getElementById(imgPreviewId);

                newPreview.style.border = "solid 1px #eeeeee";
                newPreview.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + document.selection.createRange().text + "')";
                newPreview.style.display = "block";

            }
        } else if (browserVersion.indexOf("FIREFOX") > -1) {//firefox
            var firefoxVersion = parseFloat(browserVersion.toLowerCase().match(/firefox\/([\d.]+)/)[1]);
            if (firefoxVersion < 7) {//firefox7 below
                document.getElementById(imgPreviewId).setAttribute("src", fileObj.files[0].getAsDataURL());
            } else {//firefox7.0+ 
                document.getElementById(imgPreviewId).setAttribute("src", window.URL.createObjectURL(fileObj.files[0]));
            }
        } else {
            document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
        }
    } else {
        alert("only support" + allowExtention + "suffix");
        fileObj.value = ""; //clear Selected file
        if (browserVersion.indexOf("MSIE") > -1) {
            fileObj.select();
            document.selection.clear();
        }

    }
}
function changeFile(elem) {
    //file object , preview img tag id
    previewImage(elem,'imagePreview')
}
<input type="file"  id="netBarBig"  onchange="changeFile(this)"  />
<img  src="" id="imagePreview" style="width:120px;height:80px;" alt=""/>


1

Iamge predefinito

                @Html.TextBoxFor(x => x.productModels.DefaultImage, new {@type = "file", @class = "form-control", onchange = "openFile(event)", @name = "DefaultImage", @id = "DefaultImage" })
                @Html.ValidationMessageFor(model => model.productModels.DefaultImage, "", new { @class = "text-danger" })
                    <img src="~/img/ApHandler.png"  style="height:125px; width:125px" id="DefaultImagePreview"/>
            </div>

 <script>
    var openFile = function (event) {
        var input = event.target;

        var reader = new FileReader();
        reader.onload = function () {
            var dataURL = reader.result;
            var output = document.getElementById('DefaultImagePreview');
            output.src = dataURL;
        };
        reader.readAsDataURL(input.files[0]);
    };
</script>

0

Ecco una soluzione se stai usando React:

import * as React from 'react'
import { useDropzone } from 'react-dropzone'

function imageDropper() {
  const [imageUrl, setImageUrl] = React.useState()
  const [imageFile, setImageFile] = React.useState()

  const onDrop = React.useCallback(
    acceptedFiles => {
      const file = acceptedFiles[0]
      setImageFile(file)

      // convert file to data: url
      const reader = new FileReader()
      reader.addEventListener('load', () => setImageUrl(String(reader.result)), false)
      reader.readAsDataURL(file)
    },
    [setImageFile, setImageUrl]
  )
  const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop })

  return (
    <div>
      <div {...getRootProps()}>
        {imageFile ? imageFile.name : ''}
        {isDragActive ? <p>Drop files here...</p> : <p>Select image file...</p>}
        <input {...getInputProps()} />
      </div>
      {imageUrl && (
        <div>
          Your image: <img src={imageUrl} />
        </div>
      )}
    </div>
  )
}

0

Questo è il metodo più semplice per visualizzare in anteprima l'immagine prima di caricarla sul server dal browser senza utilizzare Ajax o funzioni complicate. È necessario un evento "onchange" per caricare l'immagine.

<body>
  <input type="file" onchange="preview()">
  <img id="frame" src="" width="100px" height="100px"/>
</body>
<script>
    function preview() {
      frame.src=URL.createObjectURL(event.target.files[0]);
    }
</script>

L'immagine verrà caricata immediatamente dopo averla selezionata.


-2

per la mia app, con parametri URL GET crittografati, solo questo ha funzionato. Ho sempre avuto un TypeError: $(...) is null. Tratto da https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

function previewFile() {
  var preview = document.querySelector('img');
  var file    = document.querySelector('input[type=file]').files[0];
  var reader  = new FileReader();

  reader.addEventListener("load", function () {
    preview.src = reader.result;
  }, false);

  if (file) {
    reader.readAsDataURL(file);
  }
}
<input type="file" onchange="previewFile()"><br>
<img src="" height="200" alt="Image preview...">


-2
function assignFilePreviews() {
    $('input[data-previewable=\"true\"]').change(function() {
        var prvCnt = $(this).attr('data-preview-container');
        if (prvCnt) {
            if (this.files && this.files[0]) {
                var reader = new FileReader();
                reader.onload = function(e) {
                    var img = $('<img>');
                    img.attr('src', e.target.result);
                    img.error(function() {
                        $(prvCnt).html('');
                    });
                    $(prvCnt).html('');
                    img.appendTo(prvCnt);
                }
                reader.readAsDataURL(this.files[0]);
            }
        }
    });
}
$(document).ready(function() {
    assignFilePreviews();
});

HTML

<input type="file" data-previewable="true" data-preview-container=".prd-img-prv" />
<div class = "prd-img-prv"></div>

Questo gestisce anche il caso quando si sceglie un file con tipo non valido (es. Pdf)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.