查看: 627|回复: 0

手机端实现本地图片上传或者拍照上传功能

[复制链接]

748

主题

39

回帖

3907

积分

管理员

总舵主

积分
3907
QQ
发表于 2024-5-25 20:03:17 | 显示全部楼层 |阅读模式
最新正好在做一个手机端传图的功能,正好把过程记录下来了,下面是正文:
  1. <input type="file" class="hide" id="upimg4" accept="image/*">
复制代码
这行input代码是html端上传图片的输入框,注意accept最好写成这种*泛模式,不要使用指定模式。
我们需要做一个JS来判断是安卓系统还是IOS系统,因为初始调用经过测试只有苹果系统可以调用出手机拍照的功能,所以为了两种机型能够保持一致,我们就需要在安卓系统中增加手机拍照上传的功能。
  1. var ua = navigator.userAgent.toLowerCase();
  2. var isiOS = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1);  // ios终端
  3. if(!isiOS){
  4.      $("input").attr('capture','camera');
  5. }
复制代码
手机端请求本地文件的JS代码如下:
  1. <script>
  2. var uploadPic = function(formData,this_,imglen){
  3.     $.ajax({
  4.             type:"post",
  5.             url:"{:Url('File/uploadPicture')}",
  6.             data:formData,
  7.             cache: false,
  8.             processData : false,
  9.             contentType : false,
  10.             beforeSend: function(XMLHttpRequest){

  11.             },
  12.             success:function(data){
  13.                 alert(data);
  14.             },
  15.             error:function(data){                                   alert(JSON.stringify(data));
  16.             }
  17.         });
  18. }
  19. </script>
复制代码
上传图片,我们还需要控制上传图片的大小,代码如下:
  1. var size = ($("input")[0].files[0].size / 1024).toFixed(2);
  2. // 这里设置5m以内
  3. if(size <= 5120){
  4.     var img = $("input")[0].files[0];
  5.     var formData = new FormData();
  6.     formData.append("picture",img);
  7.     uploadPic(formData,this_,imglen);
  8. } else {

  9. }
复制代码
下面是完整的JS代码部分:
  1. //图片预览
  2.     $('.add' ).on('click',function(){
  3.         var this_ = $(this );
  4.         var ua = navigator.userAgent.toLowerCase();
  5.         var isiOS = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1);  // ios终端
  6.         if(!isiOS){
  7.             this_.next("input").attr('capture','camera');
  8.         }
  9.         this_.next("input").fadeOut();
  10.         // 这里是为了能够多次选定同一张图片
  11.         this_.after('<input type="file" class="hide" id="upimg4" accept="image/*">');
  12.         var imglen = this_.parent(".imgs").children('.img').children("img").length;
  13.         this_.next("input").click().off("change").on('change',function(){
  14.             var size = (this_.next("input")[0].files[0].size / 1024).toFixed(2);
  15.             if(size <= 5120){
  16.                 var img = this_.next("input")[0].files[0];
  17.                 var formData = new FormData();
  18.                 formData.append("picture",img);
  19.                 uploadPic(formData,this_,imglen);
  20.             } else {
  21.                 swal({
  22.                     title: ' ',
  23.                     text: '您的图片超过5M',
  24.                     type: 'warning',
  25.                     showConfirmButton:false,
  26.                     timer:1500
  27.                 });
  28.             }
  29.         });
  30.     });

  31.     function imgresize(){
  32.         setTimeout(function(){
  33.             var img = $('.img>img' );
  34.             img.each(function(){
  35.                 $(this).height('20.8vw');
  36.                 $(this).width('20.8vw');
  37.             });
  38.         },100);
  39.     }


  40.     var uploadPic = function(formData,this_,imglen){
  41.         $.ajax({
  42.             type:"post",
  43.             url:"{:Url('File/uploadPicture')}",
  44.             data:formData,
  45.             cache: false,
  46.             processData : false,
  47.             contentType : false,
  48.             beforeSend: function(XMLHttpRequest){
  49.                 $('.swal2-confirm' ).css({'background-color':'#c1c1c1','border-left-color':'#c1c1c1','border-right-color':'#c1c1c1'})
  50.             },
  51.             success:function(data){
  52.                 alert(data)
  53.                 if(imglen >= 3){
  54.                     this_.hide();
  55.                 }
  56.                 swal.close();
  57.                 var msg = $.parseJSON(data);
  58.                 if(msg.code == 1){
  59.                     if(this_.hasClass('add')){
  60.                         //图片添加
  61.                         this_.parent('.imgs').children(".img").eq(imglen).removeClass('hide' )
  62.                                 .append('<img src='+msg.data.path+' alt="图片" data-tab='+msg.data.id+'><span><img src="/home/images/common/default.png" alt=""></span>');

  63.                         // 删除图片
  64.                         $(".img span").on("click", function () {
  65.                             $(this).parent(".img").remove();
  66.                             this_.fadeIn();
  67.                             this_.before('<div class="img fl hide"></div>');
  68.                         });

  69.                         // 图片点击修改
  70.                         /*$(".img>img").on("click", function () {
  71.                          $(this).parent(".img").remove();
  72.                          this_.fadeIn().click();
  73.                          this_.before('<div class="img fl hide"></div>');
  74.                          });*/
  75.                     }else{
  76.                         //图片修改
  77.                         this_.find('img').remove();
  78.                         this_.append('<img src='+msg.data.path+' alt="图片" data-tab='+msg.data.id+'>');
  79.                     }
  80.                     imgresize();

  81.                 } else {
  82.                     return '';
  83.                 }
  84.             },
  85.             error:function(data){
  86.                 alert(JSON.stringify(data));
  87.             }
  88.         });
  89.     }
复制代码
下面是HTML代码部分:
  1. <div class="imgs clear">
  2.         <div class="img fl hide"></div>
  3.         <div class="add fl"></div>
  4.         <input type="file" class="hide" id="upimg3" accept="image/*">
  5. </div>
复制代码
好了,希望对大家有所帮助。

道不同,不相为谋!理想要有,万一实现了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2513533699@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19000917号|鲁公网安备37078302000320号

在本版发帖
关注公众号
QQ客服返回顶部