全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅析上传头像示例及其注意事项

这次分享一个简易的上传头像示例,其大致流程为:

一、将选择的图片转为base64字符串

function preview(file) {//预览图片得到图片base64
    var prevDiv = document.getElementById('preview');
    if (file.files && file.files[0]) {
      var reader = new FileReader();
      reader.onload = function(evt){
        prevDiv.innerHTML = '<img src="' + evt.target.result + '" />';
      }
      reader.readAsDataURL(file.files[0]);
    } else {
      prevDiv.innerHTML = '<div class="img" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src=\'' + file.value + '\'"></div>';
    }
  }

上面的方法可将选择的图片转为base64预览,此时可以打桩看看base64到底是什么东东。

二、根据(阿里云)上传要求,对该图像base64去头等处理

var binaryblob = function (s, type) {//blob对象
          var byteString = atob(s);
          var array = [];
          for (var i = 0; i < byteString.length; i++) {
            array.push(byteString.charCodeAt(i));
          }
          return new Blob([new Int8Array(array)], {type: type});
        };
var binaryPictureBlob = function (dataUrl, filterHead) {//上传base64去头
          var s = filterHead ? dataUrl.replace(/^data:image\/(png|jpeg|pjpeg|bmp|gif|x-png);base64,/, "") : dataUrl;
          return binaryblob(s, "image/jpeg");
        };

此时将base64去头等处理后返回一个blob对象用于上传阿里云。以上方法最好写在service、factory里,以后有图像上传需求时方便直接调用,尽量不要写在controller内。

三、第一次请求

$scope.save=function(){//保存
  var pic=binaryPictureBlob($('#preview img').attr('src'),true);//调用该方法得到上传数据
  console.log(pic);
  $http({//接口参数
    url:'',
    method:'',
    headers:{},
    data:{}
  }).success(function(data){
    console.log(data);
      //这里讲进行第二次请求
  }).error(function(err1,header1,config1,status1){//处理响应失败
    console.log(err1,header1,config1,status1);
  })
}

点击保存按钮后第一次请求是上传到本地服务器,实际是上传一些该图像的标记等信息。上传成功后会返回一个该图像对应的阿里云地址和一个阿里云上传图像的地址,此时该图像地址暂不可用。

四、第二次请求

$http({
  method:'PUT',
  url:data.UrlForPut,
  headers: {
    'Content-Type':' ',
  },
  data:pic//图像base64字符串去头等处理后的图片信息blob
}).success(function(data2){
  $scope.imgSrc=data.Url;//将服务器的数据的url赋值图片链接
}).error(function(err2,header2,config2,status2){//处理响应失败
  console.log(err2,header2,config2,status2);
});

注意:

  • 此时请求的url是第一次请求返回的一个固定地址(我这里是--data.UrlForPut)。
  • 头部信息处避免阿里云上传时报错写成'Content-Type':' '或者根据阿里云要求上传header。
  • 第二次请求成功后图片的地址是第一次返回的该图像的地址(此处是个大坑,data.Url不要写成data2.Url了)。

五、此时应该都ok了,好好欣赏靓照吧!

最后附上完整代码,望指教!

友情提示:在复制代码测试时请求参数自己加上哦!

<!DOCTYPE html>
<html ng-app="webPhotos">
<head lang="zh-CN">
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>photos</title>
  <style>
    div{text-align:center;border:1px solid #ddd;}
    button,div{margin:10px auto}
    button{border:0;width:200px;height:30px;line-height:30px;font-size:1pc;color:#333;background-color:#0ff;cursor:pointer;border-radius:5px}
    button:hover{background-color:#db7093}
    #preview,.show-img{width:200px;height:200px;}
    #preview img,.show-img img{width:100%;height:100%;}
    .file{position:relative;display:block;width:200px;height:30px;line-height:30px;background:#9acd32;border-radius:5px;margin:10px auto;overflow:hidden;color:#1e88c7;text-decoration:none;text-indent:0}
    .file input{position:absolute;font-size:75pt;right:0;top:0;opacity:0}
    .file:hover{background:#aadffd;border-color:#78c3f3;color:#004974;text-decoration:none}
  </style>
</head>
<body>
<div ng-controller="photos">
  <a href="javascript:;" class="file">
    <span>选择文件</span>
    <input type="file" onchange="preview(this)" />
  </a>
  <button class="save" ng-click="save()">保存</button>
  <h2>头像预览</h2>
  <div id="preview"></div>
  <h2>上传成功后展示头像</h2>
  <div class="show-img">
    <img ng-src={{imgSrc}} alt=""/>
  </div>
</div>
<script type="text/javascript" src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script>
  function preview(file) {//预览图片得到图片base64
    var prevDiv = document.getElementById('preview');
    if (file.files && file.files[0]) {
      var reader = new FileReader();
      reader.onload = function(evt){
        prevDiv.innerHTML = '<img src="' + evt.target.result + '" />';
      }
      reader.readAsDataURL(file.files[0]);
    } else {
      prevDiv.innerHTML = '<div class="img" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src=\'' + file.value + '\'"></div>';
    }
  }
  //以上代码最好写在service或factory里
  angular.module('webPhotos',['ng'])
      .controller('photos',function($scope,$http){
        var binaryblob = function (s, type) {//blob对象
          var byteString = atob(s);
          var array = [];
          for (var i = 0; i < byteString.length; i++) {
            array.push(byteString.charCodeAt(i));
          }
          return new Blob([new Int8Array(array)], {type: type});
        };
        var binaryPictureBlob = function (dataUrl, filterHead) {//上传base64去头
          var s = filterHead ? dataUrl.replace(/^data:image\/(png|jpeg|pjpeg|bmp|gif|x-png);base64,/, "") : dataUrl;
          return binaryblob(s, "image/jpeg");
        };
        $scope.save=function(){//保存
          var pic=binaryPictureBlob($('#preview img').attr('src'),true);//调用该方法得到上传数据
          $http({//接口参数
            url:'',
            method:'',
            headers:{},
            data:{}
          }).success(function(data){//此时上传到本地服务器成功,实际上只是上传了与此图片有关的标记,图片信息还未上传
            $http({
              method:'PUT',
              url:data.UrlForPut,//上传到本地服务器已经生成地址,但要上传到阿里云后地址才生效有上传的图像显示
              headers: {
                'Content-Type':' ',//避免阿里云上传时报错或者根据阿里云要求上传header
              },
              data:pic//图像base64字符串去头等处理后的图片信息
            }).success(function(data2){//将图像信息从服务器上传到阿里云
              $scope.imgSrc=data.Url;//将服务器的数据的url赋值图片链接
            }).error(function(err2,header2,config2,status2){//处理响应失败
              console.log(err2,header2,config2,status2);
            });
          }).error(function(err1,header1,config1,status1){//处理响应失败
            console.log(err1,header1,config1,status1);
          })
        }
      })
</script>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# 上传头像  # web前端开发upload上传头像js示例代码  # php视频拍照上传头像功能实现代码分享  # Asp.net mvc实现上传头像加剪裁功能  # php+js iframe实现上传头像界面无跳转  # JS仿flash上传头像效果实现代码  # 上传  # 写在  # 时方  # 是个  # 与此  # 还未  # 可将  # 后会  # 但要  # 友情提示  # 时请  # 传了  # 暂不  # 时将  # 靓照  # 是什么东东  # 器上  # 直接调用  # gif  # angular 


相关文章: 网站建设制作、微信公众号,公明人民医院怎么在网上预约?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  南京网站制作费用,南京远驱官方网站?  如何在阿里云高效完成企业建站全流程?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  公众号网站制作网页,微信公众号怎么制作?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  如何在IIS管理器中快速创建并配置网站?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何快速搭建高效香港服务器网站?  建站之家VIP精选网站模板与SEO优化教程整合指南  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  c++怎么用jemalloc c++替换默认内存分配器【性能】  建站之星安装模板失败:服务器环境不兼容?  如何快速搭建高效WAP手机网站吸引移动用户?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何通过cPanel快速搭建网站?  湖北网站制作公司有哪些,湖北清能集团官网?  购物网站制作公司有哪些,哪个购物网站比较好?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  免费视频制作网站,更新又快又好的免费电影网站?  建站之星安装路径如何正确选择及配置?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何做静态网页,sublimetext3.0制作静态网页?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何获取免费开源的自助建站系统源码?  海南网站制作公司有哪些,海口网是哪家的?  如何彻底卸载建站之星软件?  如何制作算命网站,怎么注册算命网站?  如何用景安虚拟主机手机版绑定域名建站?  ,网站推广常用方法?  专业网站建设制作报价,网页设计制作要考什么证?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何选择高效响应式自助建站源码系统?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  做企业网站制作流程,企业网站制作基本流程有哪些?  如何高效搭建专业期货交易平台网站?  如何高效生成建站之星成品网站源码?  宝塔建站无法访问?如何排查配置与端口问题?  学校建站服务器如何选型才能满足性能需求?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  ,购物网站怎么盈利呢?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。