前台通过base64传图片到后台的实现方法
前台将图片转换为base64的方法如下:
$("#article_image").change(function(){ var file = this.files[0]; //判断类型是不是图片 if(!/image/w+/.test(file.type)){ alert("请确保文件为图像类型"); return false; } var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function(e){ image_base64=this.result.split(",")[1]; //就是base64 article_image = image_base64; } });
后台代码接受base64的值,转换为图片后存储返回存储的url
@RequestMapping(value = "/uploadPoster.do") public @ResponseBody Object uploadPoster(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpJson httpJson = new HttpJson(); System.out.println("开始上传照片"); String customerId = request.getParameter("computecustomerId"); String ret_fileName = null;// 返回给前端已修改的图片名称 String base64Img = request.getParameter("base64"); // 临时文件路径 //String dirTemp = "\upload\temp"; String dirTemp = "\upload"; String uploadImg = "\upload"; try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); httpJson.setMsg("上传图片失败"); httpJson.setSuccess(false); return httpJson; } // response.setContentType("text/html; charset=UTF-8"); // PrintWriter out = response.getWriter(); String realPath = request.getServletContext().getRealPath(""); String tempPath = request.getServletContext().getRealPath("/") + dirTemp; File file_normer = new File(realPath + uploadImg+"/"+customerId); if (!file_normer.exists()) { file_normer.mkdirs(); } // 用于设置图片过大,存入临时文件 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(20 * 1024 * 1024); // 设定使用内存超过5M时,将产生临时文件并存储于临时目录中。 factory.setRepository(new File(tempPath)); // 设定存储临时文件的目录。 ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); if (base64Img == null) // 图像数据为空 return false; base64Img = base64Img.replaceAll("data:image/jpeg;base64,", ""); BASE64Decoder decoder = new BASE64Decoder(); try { // Base64解码 byte[] b = decoder.decodeBuffer(base64Img); for (int i = 0; i < b.length; ++i) { if (b[i] < 0) {// 调整异常数据 b[i] += 256; } } // 生成jpeg图片 ret_fileName = new String((DateHandler.dateToStr(new Date(),"yyyyMMddhhmmss")+".jpg").getBytes("gb2312"), "ISO8859-1" ) ; File file = new File(realPath + uploadImg+"/"+ customerId + "/" + ret_fileName); OutputStream out = new FileOutputStream(file); out.write(b); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } String image_url = request.getSession().getServletContext() .getContextPath()+ "/upload/" + customerId + "/" + ret_fileName; // 将已修改的图片url对应的id返回前端 httpJson.setMsg("上传图片成功"); httpJson.setSuccess(true); httpJson.setObj(image_url); return JSONObject.fromObject(httpJson); } }
17级徐朝晖 2017年3月16日
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C语言(C++)堆和栈的区别
- 下一篇: 堆和栈的区别(转过无数次的文章)