Как загрузить изображение перед загрузкой через JavaScript
Я хочу просмотреть изображение перед загрузкой на сервер. Я написал для этого немного кода, но его просматривают только в Internet Explorer, а не в других браузерах, таких как Safari, Chrome, Firefox, из-за некоторых причин безопасности. Есть ли какое-либо решение для предварительного просмотра изображения в этих браузерах?
<body>
<form name="Upload" enctype="multipart/form-data" method="post">
Filename: <INPUT type="file" id="submit">
<INPUT type="button" id="send" value="Upload">
</form>
<div
id="div"
align="center"
style="height: 200px;width: 500px;border-style: ridge;border-color: red">
</div>
</body>
<script type="text/javascript">
var img_id=0
var image = new Array()
document.getElementById('send').onclick=function()
{
img_id++
var id="imgid"+img_id
image = document.getElementById('submit').value;
document.getElementById('div').innerHTML="<img id='"+id+"' src='"+image+"' width=500px height=200px>"
}
</script>
</html>
Ответы
Ответ 1
Для Firefox. Из-за безопасности он имеет усеченный путь. Однако они предоставили другие способы сделать это:
var img = document.createElement("IMG");
if(document.all)
img.src = document.getElementById('submit').value;
else
// Your solution for Firefox.
img.src = document.getElementById('submit').files.item(0).getAsDataURL();
document.getElementById('div').appendChild(img);
Ниже приводится работа в Internet Explorer 7 и Firefox 3.
<style type="text/css">
#prevImage {
border: 8px solid #ccc;
width: 300px;
height: 200px;
}
</style>
<script type="text/javascript">
function setImage(file) {
if(document.all)
document.getElementById('prevImage').src = file.value;
else
document.getElementById('prevImage').src = file.files.item(0).getAsDataURL();
if(document.getElementById('prevImage').src.length > 0)
document.getElementById('prevImage').style.display = 'block';
}
</script>
<pre>
IE8 needs a security settings change: internet settings, security, custom level :
[] Include local directory path when uploading files to a server
( ) Disable
(o) Enable
</pre>
<form>
<input type="file" name="myImage" onchange="setImage(this);" />
</form>
<img id="prevImage" style="display:none;" />
Документация объекта списка файлов в MDC
Ответ 2
Это отлично работает для меня в FF 3.6, IE 8, Safari 4.0 и Chrome 3.195.
Несколько указателей стиля:
Ответ 3
Невозможно захватить файл пользователя перед загрузкой, за исключением использования нового API файлов:
Пример: отображение эскизов выбранных пользователем изображений
Это, конечно, не будет кросс-браузером. Также может быть способ сделать это через Flash и URL-адреса данных (или только предварительный просмотр во Flash), но я предпочитаю избегать интеграции JavaScript ↔ Flash.
Ответ 4
просто взгляните на следующую ссылку, связанную с файловым API, она работает для IE9 + i, она не работает для IE8
он показывает, как просматривать изображения и текстовые файлы
http://www.xul.fr/en/html5/filereader.php
FileReader, загрузка изображения на веб-странице
FileReader позволяет получить доступ к локальной файловой системе и загружать документы только с помощью кода JavaScript.
Это завершает выбор локального файла, так как этот тег может предоставлять содержимое этого файла только script на сервере с данными формы.
Тест на совместимость
Текущий браузер распознает его API файлов, который включает в себя объект FileReader?
Результат
Поддерживается API файлов.
Исходный код теста:
<script>
if (window.File && window.FileReader && window.FileList && window.Blob)
document.write("<b>File API supported.</b>");
else
document.write('<i>File API not supported by this browser.</i>');
</script>
Код HTML:
<input type="file" id="getimage">
<fieldset><legend>Your image here</legend>
<div id="imgstore"></div>
</fieldset>
Код JavaScript:
<script>
function imageHandler(e2)
{
var store = document.getElementById('imgstore');
store.innerHTML='<img src="' + e2.target.result +'">';
}
function loadimage(e1)
{
var filename = e1.target.files[0];
var fr = new FileReader();
fr.onload = imageHandler;
fr.readAsDataURL(filename);
}
window.onload=function()
{
var x = document.getElementById("filebrowsed");
x.addEventListener('change', readfile, false);
var y = document.getElementById("getimage");
y.addEventListener('change', loadimage, false);
}
</script>
Ответ 5
Если тип ввода - это файл, то с помощью функции htmlfilereader можно просмотреть предварительный просмотр html-страницы? используя accept type = "text/html"
Я получил описание и размер файла...
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
выше упомянутая проблема связана с автономными локальными хранимыми html-страницами. мы можем просмотреть предварительный просмотр живой страницы, используя живой URL-адрес, как -
<html>
<head>
<!--[if IE]>
<style>
#frame {
zoom: 0.2;
}
</style>
<![endif]-->
<style>
#frame {
width: 800px;
height: 520px;
border: none;
-moz-transform: scale(0.2);
-moz-transform-origin: 0 0;
-o-transform: scale(0.2);
-o-transform-origin: 0 0;
-webkit-transform: scale(0.2);
-webkit-transform-origin: 0 0;
}
</style>
</head>
<body>
<iframe id="frame" src="http://www.bing.com">
</iframe>
</body>
</html
<Р →
Ответ 6
Просто попробуйте использовать этот
В вашем файле HTML используйте
<div>
<form id="form1" runat="server">
<input type='file' id="imgInp" />
<br>
<img id="blah" src="http://i.imgur.com/zAyt4lX.jpg" alt="your image" height="100" />
</form>
<div>
И внутри вашего java script файла просто напишите это
<script>
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>
Ответ 7
Это отлично работает в FF 3.6, IE 9, Safari 4.0 и Chrome 3.195.
var reader = new FileReader();
function preview(what) {
if(jQuery.browser.msie || jQuery.browser.safari || jQuery.browser.chrome) {
document.getElementById("preview-photo").src=what.value;
return;
}
else{
// array with acceptable file types
var accept = ["image/png","image/jpeg","image/jpg","image/gif"];
// if we accept the first selected file type
if (accept.indexOf(what.files[0].type) > -1) {
if(what.files && what.files[0]){
reader.readAsDataURL(what.files[0]);
document.getElementById("preview-photo").src=reader.result;
}
}
}
}