1.H5的图片上传方式

前台代码:

 1 <form action="<%=basePath%>open/njResult.shtml"  id="njForm"  method="post">
 2      <input id="photoPath"  type="hidden" name="photoPath">
 3   </form>
 4         <div class="noUld_upB g-clear">
 5                 <div class="noUld_up">
 6                       <img class="noUld_up_img" data-up="img" src="<%=basePath %>resources/img/all/other_addImg.png">
 7                       <div class="noUld_up_cnt g-clear">
 8                           <div class="fl">请上传图片</div>
 9                           <div class="noUld_up_cnt_r"><span class="btn-s">上传</span><input type="file" id="notPassPhoto" data-up="file"></div>
10                      </div>
11                  </div>
12       
13         <div class="yesCek_submit">
14           <a id="njSumit" href="javascript:void(0)" class="btn-b">提交</a>
15         </div>

JS代码:

 1 //图片上传change事件
 2         $("#notPassPhoto ").change(function(){
 3             uploadBtnChange("notPassPhoto","photoPath");//上传图片改变时,调用base64压缩方法
 4
 5         });
 6 $('#njSumit').click(function(){
 7     var photoPath = document.getElementById('photoPath').value;//获得压缩后的base64数据
 8 if(photoPath){
 9                     var ranparam = Math.random();
10                     $.ajax({
11                             url:"njNotPassPhoto.shtml",
12                             type: "POST",
13                             data:{'notPassphotoPath':photoPath,"ranparam":ranparam}, //把base64数据传到后台,由后台解码上传到服务器
14                             async : false,
15                         cache : false,
16                             success:function(data) {
17                                 if(data.status==200){
18                                     $("#photoPath").val(data.photoPath);//获得了传回来的图片路径,用于保存到数据库
19                                     $("#njForm").submit();//表单提交
20                                 }else{
21                                       alert(data.msg);
22                                   }
23                              },
24                             error: function(XMLHttpRequest, textStatus, errorThrown){
25                                 alert(XMLHttpRequest.readyState + XMLHttpRequest.status + XMLHttpRequest.responseText);
26                         }
27                           });
28                     }else{
29                                 alert("请上传照片")
30                                 return
31                             }
32             }
33
34         });
35  function uploadBtnChange(id,val){
36             var scope = this;
37             if(window.File && window.FileReader && window.FileList && window.Blob){
38                 // 获取上传file
39                 var filefield = document.getElementById(id),
40                     file = filefield.files[0];
41                 // 获取用于存放压缩后图片base64编码
42                 var compressValue = document.getElementById(val);
43                 processfile(file,compressValue);
44             }else{
45                 alert("此浏览器不完全支持压缩上传图片");
46             }
47         }
48
49         function processfile(file,compressValue) {
50             var reader = new FileReader();
51             reader.onload = function (event) {
52                 var blob = new Blob([event.target.result]);
53                 window.URL = window.URL || window.webkitURL;
54                 var blobURL = window.URL.createObjectURL(blob);
55                 var image = new Image();
56                 image.src = blobURL;
57                 image.onload = function() {
58                     var resized = resizeMe(image);
59                     compressValue.value = resized;
60                 }
61             };
62             reader.readAsArrayBuffer(file);
63         }
64
65         function resizeMe(img) {
66             // 压缩的大小
67             var max_width = 800;
68             var max_height = 600;
69
70             var canvas = document.createElement('canvas');
71             var width = img.width;
72             var height = img.height;
73             if(width > height) {
74                 if(width > max_width) {
75                     height = Math.round(height *= max_width / width);
76                     width = max_width;
77                 }
78             }else{
79                 if(height > max_height) {
80                     width = Math.round(width *= max_height / height);
81                     height = max_height;
82                 }
83             }
84
85             canvas.width = width;
86             canvas.height = height;
87
88             var ctx = canvas.getContext("2d");
89             ctx.drawImage(img, 0, 0, width, height);
90             // 压缩率
91             return canvas.toDataURL("image/jpeg",0.92);
92         }     

后台代码:

 1 /**
 2      * Base64解码上传
 3      */
 4     @RequestMapping(value = "/njNotPassPhoto", method = RequestMethod.POST)
 5     @ResponseBody
 6     public Map<String, Object> njNotPassPhoto(String notPassphotoPath) {
 7         try {
 8             String photoPath = FileUploadUtils.getPath(notPassphotoPath);
 9             resultMap.put("status", 200);
10             resultMap.put("photoPath", photoPath);
11             return resultMap;
12         } catch (Exception e) {
13             e.printStackTrace();
14             resultMap.put("status", 500);
15             resultMap.put("msg", "服务器异常");
16         }
17         return null;
18
19     }

FileUploadUtils工具类代码:
 1 public class FileUploadUtils {
 2     private static SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
 3
 4     public static String getPath(String base64) throws IOException {
 5
 6         String saveFileName = System.currentTimeMillis()
 7                 + RandomStringUtils.random(6, true, true) + ".jpg";
 8         Date date = new Date();
 9         String datePath = format.format(date);
10         String upload = "D:\\suyi\\photo\\" + datePath + "\\";
11
12         String path = upload + saveFileName;
13         // base64图片解码
14         // 对字节数组字符串进行Base64解码并生成图片
15         if (base64 == null) // 图像数据为空
16             return "";
17         base64 = base64.replaceAll("data:image/jpeg;base64,", "");
18         BASE64Decoder decoder = new BASE64Decoder();
19         byte[] b = decoder.decodeBuffer(base64);
20         for (int i = 0; i < b.length; ++i) {
21             if (b[i] < 0) {// 调整异常数据
22                 b[i] += 256;
23             }
24         }
25
26         File dir = new File(upload);
27         if (!dir.exists()) {
28             dir.mkdirs();
29         }
30         String fileName = path;
31         File file = new File(fileName);
32         OutputStream out = new FileOutputStream(file);
33         out.write(b);
34         out.flush();
35         out.close();
36         String ImagePath = "/suyi/showImage?imgId=" + datePath + "_"
37                 + saveFileName;
38         return ImagePath;
39
40     }
41 }

 

转载于:https://www.cnblogs.com/future-eye/p/8267816.html

微信端上传图片方式1相关推荐

  1. 微信端图片上传方式2

    调用微信接口JS-SDK方式 前台代码: 1 <div class="link_cameraB"> 2 <img class="link_camera& ...

  2. php微信手机端上传图片,手机Wap微信端上传单图和上传多图的DEMO

    在手机端或者微信端的论坛或者报名等界面需要上传头像或者多张图片信息等.这个时候就需要用到手机端的上传图片功能,现在微信端也可以使用input file功能了.多图上传使用的都是ajax方式.ajax返 ...

  3. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

  4. Android上传文件到服务器500,使用WebUploader解决安卓微信浏览器上传图片中遇到的bug...

    摘自个人博客:走啊走的记录,欢迎点击查看,效果更佳! 微信浏览器上传图片bug的原因 微信在新版本中采用的是自己的X5内核浏览器,而在较老的版本中还有可能是安卓的原生浏览器.具体的环境我也不太了解,但 ...

  5. 使用WebUploader解决安卓微信浏览器上传图片中遇到的bug

    微信浏览器上传图片bug的原因 微信在新版本中采用的是自己的X5内核浏览器,而在较老的版本中还有可能是安卓的原生浏览器.具体的环境我也不太了解,但是经过实际多台安卓机型的测试,我采取的方案可以基本确保 ...

  6. python企业微信回调_python 微信企业号-回调模式接收微信端客户端发送消息并被动返回消息...

    说明:此代码用于接收手机微信端发送的消息 #-*- coding:utf-8 -*- from flask import Flask,request from WXBizMsgCrypt import ...

  7. uni app 录音结束监听_全新重构,uni-app实现微信端性能翻倍

    多次论证.数月研发,我们重写部分Vue底层.重构uni-app框架,实现了微信端性能翻倍及更多Vue语法支持. 背景 uni-app在初期借鉴了mpvue,实现了微信小程序端的快速兼容,感谢美团点评团 ...

  8. 前端使用微信sdk上传图片的坑,及万千种方法比较实用的一种,亲测有效

    vue 公众端使用微信sdk上传图片大坑 第一个坑 第二个坑 第一个坑 使用微信sdk拿到的图片并没有base64的前缀 所以我们需要自己加 iSrc = 'data:image/jpeg;base6 ...

  9. JS监听手机物理返回键(及IOS微信端的bug)

    需求场景 有一天,头儿给我提了这样一个需求: 无论页面如何跳转,在首页的时候再按返回,直接退出... 解决思路 关闭网页好说,由于我们的项目是微信公众号,直接调用微信浏览器的内置函数: WeixinJ ...

最新文章

  1. 安装hadoop下的sqoop1.99.3及配置问题全解决
  2. R语言使用caret包对GBM模型参数调优(自定义调优的评估指标,例如ROC指标):抽取预测标签及类概率、抽样ROC的指标并绘制密度图
  3. SQL Server 2005中解决死锁问题
  4. sql server 2005 T-SQL BEGIN CONVERSATION TIMER (Transact-SQL)
  5. C++中查看数据类型的方法
  6. log4j2.xml 的标签 loggers 中 root 的属性 level 指的是什么
  7. activiti高亮显示图片_如今透明LED显示屏成为广告橱窗,它们之间有什么关联?...
  8. 几个功能强大的系统源码(机票分销、机票预订、OA、手机充值、wifi营销、网络超市、体检平台)...
  9. axure web组件_AXURE原型设计:移动端选择器的应用
  10. 8g ubuntu 树莓派4b_树莓派4B安装 Ubuntu 20.04 LTS
  11. php header()的用法
  12. IntelliJ IDEA 常用设置 主题颜色模式、字体、样式、背景自定义颜色及其背景图片(图文步骤)
  13. 微信商户平台关闭自动提现
  14. Eclipse下载与安装教程 2020
  15. Python学习之文件操作【基本操作,JSON文件操作】
  16. Android 微信分享视频缩略图不显示问题
  17. 20款国内外免费使用 主流杀毒软件
  18. Android自定义九宫格手势解锁组件
  19. 【松岩盘前视点】2019-9-11
  20. 【2013年度CSDN博客之星】评奖:全文五言句,俺也拉个票

热门文章

  1. html如何找寻vue文件,如何预览vue文件
  2. linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例
  3. matlab中predictor怎么填,在MATLAB中求解非線性有限元
  4. 计算机二级考试vb知识点,2016计算机二级《VB》考试重要知识点
  5. 【AutoML】损失函数也可以进行自动搜索学习吗?
  6. 全球及中国TEA-月桂酰肌氨酸盐市场调研与竞争调查分析报告2022版
  7. Java中配置加密组件Bouncy_Castle
  8. HTTP协议和web工作原理
  9. 数字谋定农村建设-农业大健康·万祥军:农业人工智能应用
  10. Mongo学习---mongo入门1