• input file 上传图片问题


    html代码如下:
    <input id="fileup" type="file" accept="image/*" capture="camera" >

      js代码:

      $('#fileup').change(function (e) {
            /*var val= $('#upimg').valueOf()*/
            var file = $('#fileup')[0].files[0];
            //创建读取文件的对象
            var reader = new FileReader();
            //创建文件读取相关的变量
            var imgFile;
            //为文件读取成功设置事件
            reader.onload = function (e) {
                imgFile = e.target.result;
              
              var index= layer.open({
                    type: 2
                    ,content: '正在上传...',
                  shadeClose:false
                });//提示正在上传
               $.ajax({
                 url: '',
                 type: "POST",
                 data: {imgsrc: imgFile},
                 success: function (data) {
                if(data.success==true) {
                    layer.close(index);//关闭提示框
                    $(".up img").attr("src", data.imageUrl);
                }
                 }
                 });
                
            };
    

    这里我们会踩到一些坑:

     android手机微信内置浏览器上传时,会出现change事件无效,所以在这里特别提醒下在input内要加上capture="camera";

    这里我是直接获取上传图片的base64码(e.target.result),由后端处理返回数据。

    大家也可以用创建dataform来提交数据:

      var fd = new FormData();
        fd.append("upload", 1);
        fd.append("upfile", $(".fileup")[0].files[0]);
    

      FormData包含append方法可直接调用

    接下来是第三种方法:

    <form  action='XXXXXXXXXXXX' method='post' enctype='multipart/form-data><input type="file" accept="image/*" capture="camera"> </form>   

     通过原生表单提交的方式来进行上传

    enctype属性规定在发送到服务器之前应该如何对表单数据进行编码,默认的编码是:”application/x-www-form-urlencoded“。对于普通数据是挺适用的,但是,对于文件,科科,就不能乱编码了,该什么就是什么,只能使用multipart/form-data作为enctype属性值。

    下面是对FileReader作一个补充:

    • readAsDataURL() 方法。//将文件读取为base64的格式,也就是可以当成图片的src
    • result 属性 //将读取的数据保存在result里。
    • progress 事件 //定时触发,来获取当前已上传文件的大小,如进度条
    • loade 事件 //文件上传完成时触发
    • loadend 事件 //文件上传完成时(不管成功、失败)触发
    •   var reader = new FileReader(); //新建FileReader对象
          reader.readAsDataURL(file); //读取为base64
          //以下代码可以删除
          reader.onloadstart = function(){
             ... //开始读取
          };
          reader.onprogress = function(e){
              //这个是定时触发的事件,文件较大的时候较明显
              var p = '已完成:' + Math.round(e.loaded / e.total * 100) + '%' ;//上传完成进度
      
          };
          reader.onabort = function(){
               ... //用作取消上传功能
          };
          reader.onerror = function(){
              console.log('error'); //文件读取出错的时候触发
          };
          reader.onload = function(){
              console.log('load complete'); //完成
          };
      

        

  • 相关阅读:
    BUUCTF-[强网杯 2019]随便注
    Oracle 存储过程
    java.lang.OutOfMemoryError: Java heap space
    Oracle 约束
    Docker 学习1 容器技术基础入门
    Kubernetes 学习1 Devops 核心要点和k8s架构概述
    mysql Sql语句
    Shell 编程详解
    git 学习
    Linux awk学习
  • 原文地址:https://www.cnblogs.com/wmydb/p/7150057.html
Copyright © 2020-2023  润新知