zoukankan      html  css  js  c++  java
  • 使用JS配合表单上传图片并预览

    一、背景和需求

    在商家上架新商品时,需要从本地上传商品图片并预览
    将图片连同其他商品信息放入表单,通过POST请求发送给后端

    二、HTML代码

    <div class="box">
    <div class="box-left">
        <div class="title"><h1>上传商品图片</h1></div>
        <div class="sizeHint">(图片大小不得超过2M)</div>
        
        <div class="content">
            <div id="img">图片预览</div>
            <form id="form1" action="">
                <input type="file" name="file" id="pic" onchange="preview(this,'img')">
            </form>
            <div class="link">
                <a href="/backstage/" id="link">返回后台管理页面</a>
            </div>
        </div>
    </div>
    

    三、实现思路

    1、通过 [type=file] 的input上传文件

    为这个 [type=file] 的input绑定onchange事件
    将接收到的图片文件传到preview函数中
    检测文件类型和大小是否符合要求

    2、将文件以Data URL形式读入页面

    创建FileReader实例
    通过onload函数将图片渲染到页面上

    3、通过Ajax发送FormData数据类型的POST请求

    先利用已有的表单(商品数据)初始化Formdata实例
    再通过append方法将图片文件追加到Formdata实例内

    四、相关JS代码

    关于图片的上传和预览:

    function preview(file,img)
    {  
        if (file.files && file.files[0]){     
            var size = file.files[0].size;
            if(size > 2 * 1024*1024){
                alert("上传大小不符合");
                return false;
            }
             // 获取文件名 包含后缀  
             var src = file.files[0].name;  
             // 获取文件后缀                                                      
             var type=(src.substr(src.lastIndexOf("."))).toLowerCase(); 
            // 判断文件类型                                   
            if(type != ".jpg" && type != ".gif" && type !=".jpeg" && type != ".png"){           
                alert("您上传图片的类型不符合(.jpg|.jpeg|.gif|.png)!");
                return false;
            }
              
            var reader = new FileReader(); 
    
            //将文件以Data URL形式读入页面
            reader.readAsDataURL(file.files[0]); 
    
            var prevDiv = document.getElementById(img);  
    
            //成功读取后 显示图片           
            reader.onload = function(evt){                  
                prevDiv.innerHTML = '<img src="' + evt.srcElement.result + '" style="max-220px;" />';             
            }  
        }  
    }
    

    Ajax请求:

     $(function(){
         //为“立即添加”按钮绑定click事件
         $('#btn-submit').click(function()
        {
            // 用已有表单来初始化
            var formData = new FormData($("#new")[0]);
    
            //将图片文件对象添加到formData中        
            formData.append('img', $("#pic")[0].files[0]); 
            formData.append('csrfmiddlewaretoken', '{{ csrf_token }}');
    
            $.ajax({
                type : 'post',
    
                //这里写后端处理的url
                url : ' ',
             
                data : formData,
    
                cache : false,
    
                async: false,
                // 不处理发送的数据,因为data值是Formdata对象,不需要对数据做处理
                processData : false, 
    
                // 不设置Content-type请求头
                contentType : false, 
    
                success : function()    {        },
    
                error : function(){   }
            })
        });
     });
    

    完整的源代码请前往我的github仓库

    五、效果图

    image.png

  • 相关阅读:
    20145226夏艺华 《Java程序设计》第9周学习总结
    20145226夏艺华 EXP5 MSF基础应用
    20145226夏艺华 《Java程序设计》第7&8周学习总结、实验一
    20145226夏艺华 网络对抗技术EXP4 恶意代码分析
    Qt 图形视图框架<二>——<QGraphicsView、QGraphicsScene>
    Qt 图形视图框架<一>——<QGraphicsItem>
    【转载】C++ 自由存储区是否等价于堆?
    QML学习(五)——<TextInput和TextEdif输入框>
    QML学习(四)——<Text显示>
    QML学习(二)——<QML语法>
  • 原文地址:https://www.cnblogs.com/baebae996/p/13246161.html
Copyright © 2011-2022 走看看