如何在上传前后预览图像?

Posted

技术标签:

【中文标题】如何在上传前后预览图像?【英文标题】:How to preview an image before and after upload? 【发布时间】:2013-04-18 22:10:40 【问题描述】:

我要预览表单中的图像或照片,但它不起作用,html 代码如下所示:

<form action="" method="post" enctype="multipart/form-data" name="personal_image" id="newHotnessForm">
    <p><label for="image">Upload Image:</label>
    <input type="file" id="imageUpload"/></p>
    <p><button type="submit" class="button">Save</button></p>
        <div id="preview">
            <img   src="profile pic.jpg" id="thumb" />
        </div>
    </form>

并在下面合并了 JS 代码/脚本:

<script type="text/jaavascript">
$(document).ready(function()
    var thumb=$('#thumb');
    new AjaxUpload('imageUpload',
    action:$('newHotnessForm').attr('action'),
    name:'image',
    onSubmit:function(file,extension)
        $('#preview').addClass('loading');
    ,
    onComplete:function(file,response)
        thumb.load(function()
            $('#preview').removeClass('loading');
            thumb.unbind();
        );
        thumb.attr('src',response);
    
    );
);

我的表单上有两个主要问题: 1. 为什么图片或图片的预览不起作用? 2。单击保存按钮时如何从表单中粘贴照片,它将转到/链接到我创建的另一个 php 或 PHP 页面?

【问题讨论】:

Preview an image before it is uploaded的可能重复 这是简单的方法***.com/a/61380951/11766145 【参考方案1】:

试试这个:(预览)

<script type="text/javascript">
    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]);
        
    
</script>

<body>
    <form id="form1" runat="server">
        <input type="file" onchange="readURL(this);" />
        <img id="blah" src="#"  />
    </form>
</body>

工作演示here>

【讨论】:

您的解决方案确实有效,但它是否可以在我上传该链接到另一个页面的图片或图像的代码(如&lt;form id="form1" runat="server" action='page.php'&gt;)下工作? @meVeekay,我们可以在您的上述解决方案中设置最大图像数量吗? 我在使用多个输入,如何使用上面的代码来完成【参考方案2】:

meVeekay 的回答很好,我只是通过做两件事使其更加即兴发挥。

    检查浏览器是否支持 HTML5 FileReader()。

    通过检查扩展名只允许上传图像文件。

HTML:

<div id="wrapper">
    <input id="fileUpload" type="file" />
    <br />
    <div id="image-holder"></div>
</div> 

jQuery :

$("#fileUpload").on('change', function () 

    var imgPath = $(this)[0].value;
    var extn = imgPath.substring(imgPath.lastIndexOf('.') + 1).toLowerCase();

    if (extn == "gif" || extn == "png" || extn == "jpg" || extn == "jpeg") 
        if (typeof (FileReader) != "undefined") 

            var image_holder = $("#image-holder");
            image_holder.empty();

            var reader = new FileReader();
            reader.onload = function (e) 
                $("<img />", 
                    "src": e.target.result,
                        "class": "thumb-image"
                ).appendTo(image_holder);

            
            image_holder.show();
            reader.readAsDataURL($(this)[0].files[0]);
         else 
            alert("This browser does not support FileReader.");
        
     else 
        alert("Pls select only images");
    
);

【讨论】:

【参考方案3】:

在输入时type=file添加一个事件onchange="preview()"

对于函数preview(),输入:

thumb.src=URL.createObjectURL(event.target.files[0]);

活生生的例子:

function preview() 
   thumb.src=URL.createObjectURL(event.target.files[0]);
<form>
    <input type="file" onchange="preview()">
    <img id="thumb" src="" />
</form>

【讨论】:

【参考方案4】:
                    #######################
                    ###  the img page   ###
                    #######################


<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://malsup.github.com/jquery.form.js"></script>
<script type="text/javascript">
    $(document).ready(function()
        $('#f').live('change' ,function()
            $('#fo').ajaxForm(target: '#d').submit();
        );
    );
</script>
<form id="fo" name="fo" action="nextimg.php" enctype="multipart/form-data" method="post">
    <input type="file" name="f" id="f" value="start upload" />
    <input type="submit" name="sub" value="upload" />
</form>
<div id="d"></div>


                    #############################
                    ###    the nextimg page   ###
                    #############################


<?php
     $name=$_FILES['f']['name'];
     $tmp=$_FILES['f']['tmp_name'];
     $new=time().$name;
     $new="upload/".$new;
     move_uploaded_file($tmp,$new);
     if($_FILES['f']['error']==0)
     
?>
     <h1>PREVIEW</h1><br /><img src="<?php echo $new;?>"   />
<?php
     
?>

【讨论】:

这在nextimg页面上不是真的工作,图像没有显示和预览。是否涉及任何数据库?如果没有,当然,我的项目倾向于在客户端-服务器上运行。 【参考方案5】:

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

    reader.onload = function(e) 
      $('#ImdID').attr('src', e.target.result);
    ;

    reader.readAsDataURL(input.files[0]);
  
img 
  max-width: 180px;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='file' onchange="readURL(this);" />
<img id="ImdID" src=""  />

【讨论】:

以上是关于如何在上传前后预览图像?的主要内容,如果未能解决你的问题,请参考以下文章

引导图像/视频上传和预览

如何在上传前调整图像大小并进行预览

生成 BMP 图像的预览

在 xmpp 中上传预览图像

如何在 Vue.js (Element.ui) 中的上传按钮侧面上传后预览/显示图像?

如何使用javascript在表单中调整多个图像大小、预览和上传