代码之家  ›  专栏  ›  技术社区  ›  umar

如何在各种浏览器中上载前预览图像

  •  6
  • umar  · 技术社区  · 16 年前

    function preview(what) {
    if(jQuery.browser.msie) {
    document.getElementById("preview-photo").src=what.value;
    return;
    }
    else if(jQuery.browser.safari) {
    document.getElementById("preview-photo").src=what.value;
    return;
    }
    document.getElementById("preview-photo").src=what.files[0].getAsDataURL();
    //  alert(jQuery("#preview-photo").height());
    //  alert(jQuery("#preview-photo").width());
    var h = jQuery("#preview-photo").height();  
    var w = jQuery("#preview-photo").width();//assuming width is 68, and height is floating
    if ((h > 68) || (w > 68)){
    if (h > w){
    jQuery("#preview-photo").css("height", "68px");
    jQuery("#preview-photo").css("width", "auto");
    }else {
    jQuery("#preview-photo").css("width", "68px");
    jQuery("#preview-photo").css("height", "auto");
    }
    }
    }
    

    getAsDataURL()部分在firefox中起作用,“src=what.value”部分在ie6中起作用,但在safari中什么可以起作用,在ie7和ie8中“src=what.value”也起作用吗?如果没有,是否有一些解决方案也适用于此?我会很高兴,如果我可以使图像预览工作在5或6个浏览器。如果没有,那么是唯一的选择,有两个表单与图像上传另一个表单的一部分?

    5 回复  |  直到 16 年前
        1
  •  5
  •   M Rostami    14 年前

    可以使用blow函数。在IE7+和Firefox以及chrome上测试

    function loadname(img, previewName){  
    
    var isIE = (navigator.appName=="Microsoft Internet Explorer");  
    var path = img.value;  
    var ext = path.substring(path.lastIndexOf('.') + 1).toLowerCase();  
    
     if(ext == "gif" || ext == "jpeg" || ext == "jpg" ||  ext == "png" )  
     {       
        if(isIE) {  
           $('#'+ previewName).attr('src', path);  
        }else{  
           if (img.files[0]) 
            {  
                var reader = new FileReader();  
                reader.onload = function (e) {  
                    $('#'+ previewName).attr('src', e.target.result);  
                }
                reader.readAsDataURL(img.files[0]);  
            }  
        }  
    
     }else{  
      incorrect file type  
     }   
    }  
    
    <input type="file" name="image" onchange("loadname(this,'previewimg')") >
    <img src="about:blank" name="previewimg" id="previewimg" alt="">
    
        2
  •  2
  •   Toto    14 年前

    在firefox和chrome中工作

    <input type="file" id="file" />
    <div id="div"></div>
    <script type="text/javascript">
    function view() {
        var f = document.getElementById("file").files[0];
        var reader = new FileReader();
        reader.onload = (function(evt) {  //evt get all value
            document.getElementById('div').innerHTML = 
                "PIC :<img src=" +
                evt.target.result + "/>" ;
        });
        reader.readAsDataURL(f);
    }
    </script>
    
        3
  •  1
  •   rahul    16 年前

    如果这样做,这将是一个严重的安全问题。您不能在用户计算机中预览文件。您必须将文件上载到服务器,并在成功上载后显示文件的预览。

        4
  •  1
  •   Nabil Kadimi    13 年前

    blob

    这 还实现基本验证: http://jsfiddle.net/J3GP7/

        <style>
            #image_preview {
                display:none;
            }
        </style>
    
        <form>
            <p>
                <label for="image">Image:</label><br />
                <input type="file" name="image" id="image" />
            </p>
        </form>
        <div id="image_preview">
            <img src="#" /><br />
            <a href="#">Remove</a>
        </div>
    
        <script>
        /** 
        onchange event handler for the file input field.
        * It emplements very basic validation using the file extension.
        * If the filename passes validation it will show the image 
        using it's blob URL and will hide the input field and show a delete
        button to allow the user to remove the image
        */
        jQuery('#image').on('change', function () {
            ext = jQuery(this).val().split('.').pop().toLowerCase();
            if (jQuery.inArray(ext, ['gif', 'png', 'jpg', 'jpeg']) == -1) {
                resetFormElement(jQuery(this));
                window.alert('Not an image!');
            } else {
                file = jQuery('#image').prop("files")[0];
                blobURL = window.URL.createObjectURL(file);
                jQuery('#image_preview img').attr('src', blobURL);
                jQuery('#image_preview').slideDown();
                jQuery(this).slideUp();
            }
        });
    
        /**
        onclick event handler for the delete button.
        It removes the image, clears and unhides the file input field.
        */
        jQuery('#image_preview a').bind('click', function () {
            resetFormElement(jQuery('#image'));
            jQuery('#image').slideDown();
            jQuery(this).parent().slideUp();
            return false;
        });
    
        /** 
         * Reset form element
         * 
         * @param e jQuery object
         */
        function resetFormElement(e) {
            e.wrap('<form>').closest('form').get(0).reset();
            e.unwrap();
        }
        </script>
    
        5
  •  0
  •   asraful009    13 年前

    jqueryajax文件上传

    $('[name="send"]').click(function(){
    
       view();
    
       v_data = {
                    news_header : $('[name="news_header"]').val(),
                    news_auth : $('[name="news_auth"]').val(),
                    news_image : image, //this var taking for view() function what i use before
                    news_news : $('[name="news_news"]').val()    
    
                };
    
       $("#show").html(v_data.news_Header + " " + v_data.news_auth + " "+ v_data.news_image + " "+ v_data.news_news );
    
       $.ajax({
            type    :   "POST",
            url     :   './insert_news_data.php',
            enctype: 'multipart/form-data',        
            data    :   v_data,
    
            success: function(data) {
                alert(data);
            }
       });
    
    
    });