ดูตัวอย่างรูปภาพก่อนที่จะอัพโหลด


1614

ฉันต้องการที่จะสามารถดูตัวอย่างไฟล์ (ภาพ) ก่อนที่มันจะถูกอัปโหลด การดำเนินการแสดงตัวอย่างควรดำเนินการทั้งหมดในเบราว์เซอร์โดยไม่ใช้ Ajax เพื่ออัปโหลดรูปภาพ

ฉันจะทำสิ่งนี้ได้อย่างไร


โปรดทราบว่าหากคุณไม่ใช้ Gears หรือปลั๊กอินอื่นคุณไม่สามารถปรับเปลี่ยนภาพภายในเบราว์เซอร์: code.google.com/p/chromium/issues/detail?id=32276
Steve-o

ลองดูวิธีการจาวาสคริปต์ที่บริสุทธิ์นี้รวมถึงคำตอบและคำติชมของ Ray Nicholus สำหรับการแก้ปัญหาขั้นสุดท้าย: stackoverflow.com/questions/16430016/…
Jonathan Root

นี่คือบทความโดยละเอียดที่ดีพร้อมการสาธิตสดcodepedia.info/2015/06/…
Satinder singh

8
นี่เป็นวิธีง่ายๆที่ไม่ได้ใช้ jQuery: developer.mozilla.org/en-US/docs/Web/API/FileReader/
John Gilmer

คำตอบ:


2535

โปรดดูรหัสตัวอย่างด้านล่าง:

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>

นอกจากนี้คุณสามารถลองตัวอย่างนี้ที่นี่


5
คุณสามารถปรับปรุงประสิทธิภาพได้เล็กน้อยโดยกำหนดผู้อ่านหนึ่งครั้ง jsfiddle.net/LvsYc/638
Jaider

84
ทำไมต้องใช้ jQuery สำหรับ `$ ('# blah') attr ('src', e.target.result); 'เมื่อคุณทำได้ง่ายๆdocument.getElementById('blah').src=e.target.result)
EasyBB

4
ฉันทำดำเนินการ ReactJS นี้ ทำงานเหมือนจับใจ @kxc คุณควรโทรอาแจ็กซ์และส่งinput.files[0]เป็นข้อมูลเห็นเอกสารของ jQuery
Sumi Straessle

@IvanBaev input.files[0]ไม่มีเส้นทางแบบเต็ม FileReader ค้นหาไฟล์อย่างไร
แก่เก่า

4
ไม่เป็นไรเมื่อใดก็ตามที่คุณไม่สามารถใช้ jQuery ได้เพราะมันมีป่องและวานิลลาจะให้ผลลัพธ์ที่รวดเร็วกว่าโดยเฉพาะถ้าคุณมีสคริปต์มากมาย
EasyBB

355

มีสองวิธีที่คุณสามารถทำได้ วิธีที่มีประสิทธิภาพที่สุดคือการใช้URL.createObjectURL ()ในไฟล์จาก<input> ของคุณ ผ่าน 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]);
    output.onload = function() {
      URL.revokeObjectURL(output.src) // free memory
    }
  };
</script>

คุณยังสามารถใช้FileReader.readAsDataURL ()เพื่อแยกไฟล์จาก <input> ของคุณ สิ่งนี้จะสร้างสตริงในหน่วยความจำที่มีการเป็นตัวแทน 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>


40
อ่านอย่างระมัดระวัง: readAsDataURL และ createObjectURL จะแคชรูปภาพในเบราว์เซอร์จากนั้นส่งคืนสตริงที่เข้ารหัส base64 ซึ่งอ้างอิงตำแหน่งรูปภาพในแคช หากล้างแคชของเบราว์เซอร์สตริงที่เข้ารหัส base64 จะไม่อ้างอิงรูปภาพอีกต่อไป สตริง base64 ไม่ใช่ข้อมูลรูปภาพจริงมันเป็นการอ้างอิง URL ไปยังรูปภาพและคุณไม่ควรบันทึกลงในฐานข้อมูลโดยหวังที่จะดึงข้อมูลภาพ ฉันเพิ่งทำผิดนี้ (ประมาณ 3 นาทีที่แล้ว)
tfmontague

9
เพื่อหลีกเลี่ยงปัญหาหน่วยความจำคุณควรโทรหาURL.revokeObjectURLเมื่อคุณทำ Blob เสร็จแล้ว
Apolo

@Apolo ไม่ได้ในกรณีนี้ดูคำตอบนี้: stackoverflow.com/a/49346614/2313004
grreeenn

ลองใช้วิธีแก้ปัญหาของคุณ .... ขอบคุณ
Ajay Kumar

219

วิธีแก้ปัญหาแบบหนึ่งซับ:

รหัสต่อไปนี้ใช้ URL วัตถุซึ่งมีประสิทธิภาพมากกว่า Data 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

2
@Raptor และเพื่อให้เป็นทั้ง File API ... ( FileReader, input.filesฯลฯ ) URL.createObjectURLเป็นวิธีที่จะไปเมื่อจัดการกับไฟล์ที่ผู้ใช้ส่งมันสร้าง symlink ในหน่วยความจำในไฟล์จริงบนดิสก์ของผู้ใช้
Kaiido

@cnlevy เราจะเข้าถึงไฟล์ที่อัพโหลดได้อย่างไร เป็นไปได้หรือไม่ที่จะได้รับจาก URL ตามที่ระบุไว้? จะเจาะจงฉันกำลังใช้กระติกซึ่งรองรับการเข้าถึงไฟล์ที่อัปโหลดแล้ว มีวิธีอื่นในหนึ่งซับนี้ไหม
Abhishek Singh

นี่เป็นคำตอบที่ดีที่สุดตลอดกาล
Navid Farjad

วิธีนี้ไม่ได้ผลสำหรับฉัน ภาพตัวอย่างไม่แสดง
Sundaramoorthy J

คำตอบที่ดีที่สุด! ขอบคุณ
A7madev

46

คำตอบของ 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 เรารวมถึงมาตรฐานและ Javascripts เฉพาะ IE:

<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')whith $('#preview')และเพิ่ม$('#preview').show()

ตอนนี้ Javascript เฉพาะของ 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';
}    

นั่นคือ. ทำงานได้ใน 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


24

ฉันได้แก้ไขคำตอบของ @ 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');
    }
}

19

นี่คือไฟล์หลายเวอร์ชันตามคำตอบของ 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');
    });
});

ต้องการ jQuery 1.8 เนื่องจากการใช้งาน $ .parseHTML ซึ่งควรช่วยในการลด XSS

สิ่งนี้จะได้ผลนอกกรอบและการพึ่งพาเพียงอย่างเดียวที่คุณต้องการคือ jQuery


16

ใช่. มันเป็นไปได้.

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

คุณสามารถรับการสาธิตสดได้จากที่นี่


11

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>

เพียงแค่ทราบ: ฉันไม่สามารถให้เครดิตสำหรับสิ่งนี้ แต่คุณสามารถใช้<label>และหลีกเลี่ยงจาวาสคริปต์ในการจัดการกับการคลิกปุ่มทั้งหมด ไฟล์อินพุตทริกเกอร์ด้วย HTML / CSS แท้ๆ และมันก็ไม่แฮ็กเลย
Regular Joe

7

ตัวอย่างที่มีหลายภาพโดยใช้ 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>

5

วิธีการเกี่ยวกับการสร้างฟังก์ชั่นที่โหลดไฟล์และเริ่มเหตุการณ์ที่กำหนดเอง จากนั้นแนบผู้ฟังเข้ากับอินพุต วิธีนี้ทำให้เรามีความยืดหยุ่นในการใช้ไฟล์มากขึ้นไม่ใช่แค่เพื่อดูภาพตัวอย่าง

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

น่าจะเป็นรหัสของฉันไม่ดีเท่าผู้ใช้บางคน แต่ฉันคิดว่าคุณจะได้รับจุดของมัน ที่นี่คุณสามารถดูตัวอย่าง


5

ต่อไปนี้เป็นรหัสการทำงาน

<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

ใน React หากไฟล์อยู่ในอุปกรณ์ของคุณคุณสามารถใช้:

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

1
สิ่งนี้ช่วยชีวิตฉันได้! ง่ายกว่าโซลูชัน React โดยใช้ FileReader
Jonathan

2

แล้วโซลูชันนี้ล่ะ?

เพียงเพิ่มแอตทริบิวต์ data "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
// /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!
}));

ดูตัวอย่างได้ที่ JSFiddle


2

ลองสิ่งนี้

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

ดูตัวอย่างภาพหลายภาพก่อนที่จะอัพโหลดโดยใช้ jQuery / javascript?

การดำเนินการนี้จะแสดงตัวอย่างไฟล์หลาย ๆ ไฟล์เป็นภาพขนาดย่อในแต่ละครั้ง

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>

ต้นฉบับ

$("#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.");
    }
});

สาธิตการทำงานบน Codepen

สาธิตการทำงานบน jsfiddle

ฉันหวังว่านี่จะช่วยได้


1

ฉันได้สร้างปลั๊กอินที่สามารถสร้างเอฟเฟกต์ตัวอย่างใน IE 7+ ด้วยอินเทอร์เน็ต แต่มีข้อ จำกัด เล็กน้อย ฉันใส่มันลงในหน้า GitHubเพื่อให้ง่ายขึ้น

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

สำหรับการอัปโหลดภาพหลายภาพ (แก้ไขเป็นโซลูชันของ @ 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

มันเป็นรหัสของฉันสนับสนุน 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

                @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

นี่เป็นวิธีแก้ปัญหาหากคุณใช้ 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

นี่เป็นวิธีที่ง่ายที่สุดในการดูตัวอย่างภาพก่อนที่จะอัพโหลดไปยังเซิร์ฟเวอร์จากเบราว์เซอร์โดยไม่ต้องใช้ Ajax หรือฟังก์ชั่นที่ซับซ้อนใด ๆ ต้องการกิจกรรม "onchange" เพื่อโหลดรูปภาพ

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

ภาพจะโหลดทันทีหลังจากเลือก

คลิกที่ลิงค์นี้เพื่อดูว่ามันทำงานอย่างไรhttps://youtu.be/7_lGhrYZJWw


-2

สำหรับแอปของฉันด้วยพารามิเตอร์ 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...">


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

นอกจากนี้ยังจัดการกรณีและปัญหาเมื่อเลือกไฟล์ที่มีประเภทไม่ถูกต้อง (เช่น pdf)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.