微信端上传图片方式1

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