Загрузите изображение для анализа перед загрузкой [дубликат]

Другие два варианта:

Базовый пакет:

df <- unstack(dat1, form = value ~ numbers)
rownames(df) <- unique(dat1$name)
df

sqldf package:

library(sqldf)
sqldf('SELECT name,
      MAX(CASE WHEN numbers = 1 THEN value ELSE NULL END) x1, 
      MAX(CASE WHEN numbers = 2 THEN value ELSE NULL END) x2,
      MAX(CASE WHEN numbers = 3 THEN value ELSE NULL END) x3,
      MAX(CASE WHEN numbers = 4 THEN value ELSE NULL END) x4
      FROM dat1
      GROUP BY name')
1237
задан Justin 6 September 2011 в 11:49
поделиться

20 ответов

Пожалуйста, посмотрите пример кода ниже:

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]);
  }
}

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

Кроме того, вы можете попробовать этот образец здесь .

1960
ответ дан Paolo Forgia 22 August 2018 в 23:44
поделиться
  • 1
    выше работает в Fx 3.6 и Chrome на моем XP. – mplungjan 16 December 2010 в 11:08
  • 2
    Спасибо ... вы спасатель жизни: D Ваше решение - единственное, что сработало, и поверьте мне, когда я говорю, что я много искал в Интернете для этого трюка. В gmail (составьте почту - & gt; insert image) они показывают вам предварительный просмотр, но изображение сначала загружается на их серверах, а затем отображается в вашем браузере. – Igor Popov 22 January 2011 в 19:31
  • 3
    спасибо ... не работает в IE 8 любое решение? – abhijit 30 April 2011 в 13:35
  • 4
    API FileReader поддерживается только в IE10 и выше. caniuse.com/filereader – Kelly Cook 29 August 2013 в 17:06
  • 5
  • 6
    Зачем использовать jQuery для `$ ('# blah'). Attr ('src', e.target.result);` когда вы могли просто сделать document.getElementById('blah').src=e.target.result) – EasyBB 21 July 2014 в 20:26
  • 7
    – Sumi Straessle 13 March 2017 в 10:07
  • 8
    – Liam Appleyard 24 April 2018 в 10:44
  • 9
    – Old Geezer 30 August 2018 в 02:23

Как создать функцию, которая загружает файл и запускает пользовательское событие. Затем присоедините слушателя к входу. Таким образом, у нас больше гибкости в использовании файла, а не только для предварительного просмотра изображений.

/**
 * @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)

Наверное, мой код не так хорош, как некоторые пользователи, но я думаю, вы его получите. Здесь вы можете увидеть пример

4
ответ дан 2 revs 22 August 2018 в 23:44
поделиться

Пример с несколькими изображениями с использованием JavaScript (jQuery) и 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);
    });
}

Разметка (HTML)

<form id="form1" runat="server">
    <input type="file" id="imgUpload" multiple/>
</form>
6
ответ дан AdamMcquiff 22 August 2018 в 23:44
поделиться

Я создал плагин, который может генерировать эффект предварительного просмотра в IE 7+ благодаря интернету, но имеет мало ограничений. Я помещал его в github page , чтобы его было легче получить

$(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
ответ дан Andrew 22 August 2018 в 23:44
поделиться
  • 1
    @kleopatra попытается отредактировать сообщение в соответствии с его потребностями, спасибо – Andrew 27 July 2015 в 07:16
  • 2
    при удалении предварительного просмотра файл не удаляется из поля просмотра. имя файла должно быть удалено. – Hamza Zafeer 11 September 2015 в 15:03
  • 3
    @HamzaZafeer, он должен удалить файл, поскольку соответствующий вход удаляется dom. Можете ли вы определить свои трудности? – Andrew 12 September 2015 в 05:26

Ответ LeassTaTT хорошо работает в «стандартных» браузерах, таких как FF и Chrome. Решение для IE существует, но выглядит иначе. Здесь описание кросс-браузерного решения:

В HTML нам нужны два элемента предварительного просмотра: img для стандартных браузеров и div для IE

HTML:

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

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

В CSS мы указываем следующую специфическую IE:

CSS:

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

В HTML мы включаем стандарт и IE-специфичные Javascripts:

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

pic_preview.js - это Javascript из ответа LeassTaTT. Замените $('#blah') с помощью $('#preview') и добавьте $('#preview').show()

Теперь IE-специфический Javascript (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';
}    

Это так. Работает в IE7, IE8, FF и Chrome. Пожалуйста, проверьте в IE9 и сообщите. Идея предварительного просмотра IE была найдена здесь: http://forums.asp.net/t/1320559.aspx

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

43
ответ дан Aperçu 22 August 2018 в 23:44
поделиться
  • 1
    Не работает в IE8 +, потому что путь, возвращаемый с помощью "imgFile.value" в вашем javascript не реально. Начиная с IE8, MS добавила функцию безопасности, где реальный путь к файловой системе недоступен. (только путь вокруг этого заключается в том, чтобы сайт был добавлен на доверенные сайты) – Jeff 19 April 2012 в 18:51
  • 2
    Просто протестирован на IE 7, 8, 9: работает GREAT! Это волшебство, мой герой :) Thx! Не знаю, почему, но атрибут фильтра стиля для div напрямую (style = & quot; filter: ... & quot;) заставляет его работать! – user 15 March 2013 в 15:31
  • 3
    пожалуйста, как это сделать, если я хочу его отменить, например, вариант & quot; cancel & quot; отменить предварительный просмотр изображения – medBo 25 September 2013 в 23:31
  • 4
    нет, его не работает в IE .. – Raheel Hasan 16 December 2013 в 10:53
  • 5
    Мой случай: он работает на IE 7, 8 и 9, но не работает для IE10 – Justin 2 December 2014 в 20:22

Однолинейное решение:

В следующем коде используются URL-адреса объектов, что намного эффективнее, чем URL-адрес данных для просмотра больших изображений (URL-адрес данных - это огромная строка, содержащая все данные файла, тогда как URL-адрес объекта - это просто короткая строка, ссылающаяся на данные файла в памяти):

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

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

Сгенерированный URL-адрес будет выглядеть следующим образом:

blob:http%3A//localhost/7514bc74-65d4-4cf0-a0df-3de016824345
132
ответ дан cnlevy 22 August 2018 в 23:44
поделиться
  • 1
    уведомление о версии : поддерживает IE10 + caniuse.com/#feat=bloburls – Raptor 23 July 2015 в 06:58
  • 2
    Наверху: он просто работает, молниеносно, не полагается на jquery, и это настоящий однострочный. Если вы используете jquery $('your_selector').attr('src', window.URL.createObjectURL(this.files[0])). Безболезненно. Спасибо. – Cyril Duchon-Doris 6 May 2016 в 17:16
  • 3
    @Raptor, а также весь файл API ... (FileReader, input.files и т. Д.) URL.createObjectURL - это способ работы с файлами, представленными пользователем, он создает только символическую ссылку в реальном файле в реальном файле на диске пользователя. – Kaiido 2 July 2017 в 02:20
  • 4
    Есть ли способ использовать это с несколькими изображениями? – Rich 15 October 2017 в 15:02
  • 5
    @Rich: this.files[0] означает первый («0-й») образ. Просто перейдите через this.files, и вы можете использовать несколько изображений для их предварительного просмотра. – Jesper 3 April 2018 в 15:07

Попробуйте «загрузить предварительный просмотр jQuery Plugin» libaray, даже вы можете протестировать демонстрационный код

на этом сайте http://opoloo.github.io/jquery_upload_preview/

Демо-снимок:

0
ответ дан Hassan Saeed 22 August 2018 в 23:44
поделиться
  • 1
    не работает в моем хром 64 других примера работают – Alok 24 February 2018 в 14:02
  • 2
    даже работая на хром. stackoverflow имеет проблему предварительного просмотра, возможно, они блокируют любой скрипт jquery. Вы можете протестировать демонстрационный сайт opoloo.github.io/jquery_upload_preview – Hassan Saeed 25 February 2018 в 14:26
  • 3
    ok, я вернул свой -1 после повторного тестирования с вашей ссылкой – Alok 25 February 2018 в 14:33
  • 4
    спасибо за доброту – Hassan Saeed 28 February 2018 в 13:25
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>

Это также обрабатывает случай, когда выбран файл с недопустимым типом (например, pdf)

0
ответ дан Jinu Joseph Daniel 22 August 2018 в 23:44
поделиться

Для загрузки нескольких изображений (модификация к решению @ 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/

Надеюсь, это поможет кому-то.

1
ответ дан Keyur K 22 August 2018 в 23:44
поделиться

Да. Это возможно.

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);
        }    
    }

Здесь вы можете получить Live Demo .

11
ответ дан Md. Rahman 22 August 2018 в 23:44
поделиться

Ниже приведен рабочий код.

<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]);
        }
    }
3
ответ дан Muhammad Awais 22 August 2018 в 23:44
поделиться

Вот несколько версий файлов, основанных на ответе Ивана Баева.

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');
    });
});

Требуется jQuery 1.8 из-за использования $ .parseHTML, который должен помочь в смягчении XSS.

Это будет работать из коробки, и вам потребуется только одна из jQuery.

14
ответ дан Nino Škopac 22 August 2018 в 23:44
поделиться
  • 1
    Возможно ли иметь тег div вокруг каждого символа & lt; img & gt; и способ удалить их из предварительного просмотра / загрузки? – Rich 15 October 2017 в 15:08
  • 2
    @Rich Конечно, просто поиграй с ним – Nino Škopac 16 October 2017 в 10:10

Попробуйте это

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">

0
ответ дан Nisal Edu 22 August 2018 в 23:44
поделиться

Есть несколько способов сделать это. Наиболее эффективным способом было бы использовать URL.createObjectURL () в файле из вашего & lt; input & gt; . Передайте этот URL в img.src , чтобы сообщить браузеру загрузить предоставленное изображение.

Вот пример:

<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]);
  };
</script>

Вы также можете использовать FileReader.readAsDataURL () , чтобы проанализировать файл из вашего & lt; input & gt ;. Это создаст строку в памяти, содержащую представление base64 изображения.

<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>

236
ответ дан nkron 22 August 2018 в 23:44
поделиться
  • 1
    Внимательно прочитайте: readAsDataURL и createObjectURL будут кэшировать изображение в браузере, а затем возвращать строку с кодировкой base64, которая ссылается на местоположение изображения в кеше. Если кеш браузера очищен, строка с кодировкой base64 больше не будет ссылаться на изображение. Строка base64 - это не фактические данные изображения, это ссылка на изображение, и вы не должны сохранять ее в базе данных, надеясь получить данные изображения. Я недавно совершил эту ошибку (около 3 минут назад). – tfmontague 13 January 2015 в 13:02
  • 2
    @nkron Спасибо за ответ. Однако изображение исчезает, когда представление возвращается из контроллера после его отправки (в MVC). Можно ли сохранить выбранное изображение, даже если этот сценарий? – Clint Eastwood 6 March 2015 в 15:33
  • 3
    @ H.Johnson, посмотрите на sessionStorage . Вы можете сохранить версию dataURL изображения в sessionStorage, а затем восстановить его, вернувшись на страницу. – nkron 7 May 2015 в 18:10
  • 4
    Используется первое решение (2) на основе спецификации браузера. – Rob Scott 26 May 2015 в 11:36
  • 5
    Отличный ответ. У меня есть дополнительный вопрос по этому фрагменту: как я могу отменить позже? URL.revokeObjectURL (), чтобы освободить память, потому что после многих тестов она проходит очень медленно. Заранее спасибо. – RaRdEvA 30 June 2018 в 22:02

для моего приложения, с зашифрованными параметрами URL-адреса GET, только это сработало. Я всегда получал TypeError: $(...) is null. Взято из 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...">

-1
ответ дан Robert TheSim 22 August 2018 в 23:44
поделиться

Как насчет этого решения?

Просто добавьте атрибут данных «data-type = editable» в тег изображения следующим образом:

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

И сценарий к вашему проекту выкл ...

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
// https://stackoverflow.com/questions/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!
}));

См. демонстрацию в JSFiddle

2
ответ дан Rodolpho Brock 22 August 2018 в 23:44
поделиться
  • 1
    Как использовать его на моей странице .NET. Я хочу сохранить этот файл в моей базе данных. – VIPUL PARMAR 3 April 2015 в 09:04

Я отредактировал ответ @ Ivan, чтобы отобразить изображение «Без предварительного просмотра», если это не изображение:

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');
    }
}
22
ответ дан Sachin Prasad 22 August 2018 в 23:44
поделиться
  • 1
    Но изображение исчезает, когда представление возвращается из контроллера после его отправки (в MVC). Можно ли сохранить выбранное изображение, даже если этот сценарий? – Clint Eastwood 6 March 2015 в 15:34
  • 2
    @Sachin Prasad, можем ли мы установить максимальное количество файлов в предварительном просмотре перед загрузкой – Super Model 4 November 2017 в 23:55

Чисто и просто JSfiddle

Это будет полезно, если вы хотите, чтобы событие вызывалось косвенно из div или кнопки.

<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>
7
ответ дан Sivashanmugam Kannan 22 August 2018 в 23:44
поделиться
  • 1
    отлично, спасибо за обмен, и я получаю URL-адрес этого изображения предварительного просмотра? Мне нужно загрузить его через PHP. Благодаря! – xscoder 9 March 2017 в 13:14
  • 2
    Просто примечание: я не могу взять на это кредит, но вы можете использовать <label> и избегать javascript для обращения к кнопке в целом. Trigger File-input с чистым HTML / CSS. , и это вообще не хаки. – Regular Joe 11 October 2017 в 20:27

Это мой код. Поддержка IE [6-9], chrome 17 +, firefox, Opera 11 +, Maxthon3

HTML

<input type="file"  id="netBarBig"  onchange="changeFile(this)"  />
<img  src="" id="imagePreview" style="width:120px;height:80px;" alt=""/>

javascript:

<script>
   
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')
}

</script>

0
ответ дан Steve Jiang 22 August 2018 в 23:44
поделиться

Если вы используете угловые, тогда посмотрите эту директиву ng-file-upload

. Это довольно круто.

0
ответ дан VivekDev 22 August 2018 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: