关于微信公众号实现图片上传的问题总结

最开始做这块的时候,主要是有两种方案

方案一利用微信提供的接口实现;参考链接:https://www.cnblogs.com/lilinwei340/p/6379464.html

方案二,利用 输入输出流进行图片上传保存,在这里贴出代码来

<form id="originalForm" class="imgPic uploadForm" name="form"
                    action="" enctype="multipart/form-data">
                    <input name="resoType" value="images" style="display: none;" /> <input
                        id="fileNames" name="fileNames" value="" style="display: none;" />
                    <ul class="photoIds">
                        <li photoid="" class="upcam choosebtn"><a href="#"
                            οnclick="uploadImage($(this))"><img
                                src="../images/newJc/camera.png" class="camera"/></a></li>
                    </ul>
                </form>

这里是存放图片的页面结构

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~图片的方法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        var ua = navigator.userAgent.toLowerCase();//获取浏览器的userAgent,并转化为小写——注:userAgent是用户可以修改的
        var isIos = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1);//判断是否是苹果手机,是则是true
        //创建input file 次数
        var times = 0;
        //选择图片的所有次数
        var imageTimes = 0;
        //选择图片
        function uploadImage(that) {
            times = times + 1;
            isIos ? $(that).parent().before('<input name="imgList" class="abc" type="file" id="fileInput' + times + '" οnchange="showUpImage($(this))" style="display:none;" multiple="multiple" accept="image/*" capture="camera" name="cameraInput">') : $(that).parent().before('<input name="imgList"  capture="camera" type="file" id="fileInput' + times + '" οnchange="showUpImage($(this))" style="display:none;" multiple="multiple" accept="image/*" capture="camera" name="cameraInput">');
                $("#fileInput" + times).click();
        }
        //选择图片预览
        function showUpImage(that) {
            var id = that.attr('id');
            var files = document.getElementById(id).files;
            var fileNum = $(that).parents(".photoIds").find("li").length;
            if (fileNum >= 3) {
                $(that).parents(".photoIds").find(".choosebtn").hide()
            }
            for (var i = 0; i < files.length; i++) {
//                $(that).parent().find(".upcam").before(
//                    '<li class="photoId' + imageTimes + '" photoId="' + files[i].name + '"><a href="#" οnclick="showBigImage(' + imageTimes + ')">'
//                    + '<img class="certImgAttach' + imageTimes + '" /><b class="deletImg" οnclick="removeImage(' + imageTimes + ')"></b>'
//                    + '</a></li>');
                 $(that).parent().find(".upcam").before(
                         '<li class="photoId' + imageTimes + '" photoId="' + files[i].name + '"><a href="#" οnclick="showBigImage($(this))">'
                         + '<img class="certImgAttach' + imageTimes + '" /><b class="deletImg" οnclick="removeImage($(this))"></b>'
                         + '</a></li>');
                var imgObjPreview = document.getElementsByClassName("certImgAttach" + imageTimes)[0];
                // 火狐下,直接设img属性
                // 火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
                imgObjPreview.src = window.URL.createObjectURL(files[i]);
                imageTimes = imageTimes + 1;
            }
        }
        //放大
        function showBigImage(that) {
            var nowImg =  that;
            $(nowImg).hasClass("bigImg") ? $(nowImg).removeClass("bigImg") : $(nowImg).addClass("bigImg")
        }
        //获取预览文件数
        function getFileNumber() {
            var fileNum = 0;
            $(".photoIds li").each(function () {
                if ($(this).attr("photoId") != null && $(this).attr("photoId") != "") {
                    fileNum = fileNum * 1 + 1;
                }
            });
            return fileNum;
        }
        //移除
        function removeImage(that) {
//            var liLen = $(".photoId" + imgId).parent().find("li").length - 1
//            if (liLen <= 3) $(".photoId" + imgId).parent().find(".choosebtn").show()
//            $(".photoId" + imgId).add("#fileInput" + (imgId + 1)).remove()
            var liLen = $("#mmm").find("ul:eq(0)").find("li").length - 1
            if (liLen <= 3)  $("#mmm").find(".choosebtn").show();
            that.parent().parent().add($("#mmm").find("#fileInput"+(that.parent().parent().attr("class").slice(7)*1+1))).remove()
        }
        function getFileNames() {
            var fileNames = "";
            $(".photoIds li").each(function () {
                if ($(this).attr("photoId") != null && $(this).attr("photoId") != "") {
                    fileNames = fileNames + $(this).attr("photoId") + ",";
                }
            });
            if (fileNames != "") {
                fileNames = fileNames.substring(0, fileNames.length - 1);
            }
            return fileNames
        }

        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~图片的方法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

用到的js方法

 

这里只是页面的方法, 实现了页面的调取摄像头以及进行图片的回显,

  $.ajax({
                              url: sessionStorage.getItem("httpSession") + 'Img/setPicUpload.do',
                              type: 'POST',
                              data: formData,
                              async: false,
                              cache: false,
                              contentType: false,
                              processData: false,
                              dataType: "json",
                              success: function (returndata) {
                                  if(returndata!=null && returndata.result.length>0){
                                      for(var i=0;i<returndata.result.length;i++){
                                          photo+=returndata.result[i]+">"
                                      }
                                  }else{
                                      photo=null;
                                  }
                                  if(photo!=null){
                                      photo=photo.slice(0,photo.length)
                                  }
                                  photos.push(photo);
                              }
                          })

图片进行后台交互存储用的是转为formData 进行ajax传输

@RequestMapping(value = "/setPicUpload.do", produces = { "text/html;charset=UTF-8;", "application/json;" })
    @ResponseBody
    public Map<String,Object> setPicUpload(@RequestParam(required = false, value = "imgList") List<MultipartFile> file,
            HttpServletResponse response) throws IOException {
        response.setHeader("Access-Control-Allow-Origin", "*");
        ResponseObject result = new ResponseObject();
        List<String> list = new ArrayList<String>();
        Map<String,Object> map=new HashMap<String, Object>();
        // 文件返回路径
        for (int i = 0; i < file.size(); i++) {
            if (file.get(i).getOriginalFilename() == null || file.get(i).getOriginalFilename().equals("")) {
                continue;
            } else {
                try {
                    String path = infoScopeImgReportService.uploadPic(file.get(i).getBytes(), file.get(i).getOriginalFilename(),
                            file.get(i).getSize());
                    // 获取url
                    String url = fdfsClientConf.init.getStorage();
                    // String[] split = url.split(":");
                    list.add(url + path);
                } catch (Exception e) {
                    // 删除案卷的操作
                    e.printStackTrace();
                }
            }
        }
        map.put("result", list);
        return map;
    }

 

后台为ssm框架,这位controller层,图片存储用的fastDFS,进行的图片存储,这里完成了图片的存储,当然这种做饭有一点不好的是,由于机型太多的原因,有几类手机是无法实现图片上传的,其实不是无法存储,而已利用input调不起手机的摄像头,目前知道的华为 mate9。苹果5s是有问题的。目前正在适配此类机型,后续进行更新。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值