base64还原 java_base64字符串还原成原图片
今天做一个截图上传到ftp服务器的功能,用的是jquery插件cropbox.js,后台使用的springmvc
@RequestMapping("/saveProductInfo")
public ModelAndView uploadPreviewImage(HttpServletRequest request,AbcTourProduct product,ScheduleVO scheduleVO) throws IOException{
ModelAndView modelAndView=new ModelAndView();
//1.文件上传
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
MultipartFile smallMutiFile = multipartRequest.getFile("upload-file");
MultipartFile bigMutiFile = multipartRequest.getFile("upload-file2");
String fileName1= smallMutiFile.getOriginalFilename();
String fileName2= bigMutiFile.getOriginalFilename();
int i1=fileName1.lastIndexOf(".");
String name1=fileName1.substring(0, i1);
String suffix1=fileName1.substring(i1);
String smallName=name1+UUID.randomUUID().toString()+suffix1;
int i2=fileName2.lastIndexOf(".");
String name2=fileName2.substring(0, i2);
String suffix2=fileName2.substring(i2);
String bigName=name2+UUID.randomUUID().toString()+suffix2;
File smallFile=FileUtil.multipartFileToFile(smallMutiFile);
File bigFile=FileUtil.multipartFileToFile(bigMutiFile);
boolean success1=FileUtil.ftpUpload(smallFile, smallName, "/journey/product/");
boolean success2=FileUtil.ftpUpload(bigFile, bigName, "/journey/product/");
if(success1&&success2){
String smallSrc="/journey/product/"+ smallName;
String bigSrc="/journey/product/"+ bigName;
product.setProImgUrl(bigSrc);
product.setProSmallImgUrl(smallSrc);
//新增产品
ListscheduleList =scheduleVO.getScheduleVOs();
productService.insertSelective(product, scheduleList);
}
return modelAndView;
}
这样做了之后,controller中获得的是原图而不是截图,于是我去看插件的实现,发现截图后的图片的src是base64的一串字符串,非常长,如下图只是一小部分:
然后我就想着怎样把这一串的字符串在后台转成图片进行上传,
做了一个小栗子:
package com.admin.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.net.util.Base64;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
@RequestMapping("/saveProductInfo")
public void uploadPreviewImage(String base64Str) throws IOException{
int start = base64Str.indexOf(',') + 1;
base64Str=base64Str.substring(start);
//注意:需要将头部的
给去掉
byte[] bytes=Base64.decodeBase64(base64Str);
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {// 调整异常数据
bytes[i] += 256;
}
}
OutputStream outputStream=new FileOutputStream("d://aaa");
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
}
对,就是这样,然后再用File取这个图片,在进行上传的相关步骤
注意引入的Base64的包,maven坐标是这个
commons-codec
commons-codec
1.7
话说,这个东西花费了我大半天的功夫,,,主要原因是在截取去掉base64字符串的头部的
的时候多算了一位导致生成的图片一直是损坏无法打开的,
特此,
mark一下
=====================================================================================================
在出问题的时候在技术群问了,有两点启发
1.通过base64字符串不能获得原图片的后缀,所以巧妙的方法是不写后缀,因为图片都是在web端查看的,所以不写后缀的话会选择合适的形式来打开
2.另外一哥们儿写过的代码,还没仔细看,先存档一下
base64还原 java_base64字符串还原成原图片相关推荐
- ios objective-c将base64位编码字符串转换成图片
碰到个好用的网站 http://www.base64-image.de/ NSString *strData = @"/9j/4AAQSkZJRgABAQEAEwATAAD/2wBDAAY ...
- 转python 将base64字符串还原成图片保存
转python 将base64字符串还原成图片保存 import os,base64 strs='''/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLC ...
- java 将base64字符串转换成图片
package kf.ats.gvnsvr.client.taizhou.common; import java.io.OutputStream; import sun.misc.BASE64Deco ...
- base64字符串转化成图片
/*** base64字符串转化成图片** @param base64* @return*/ public static File base64ToFile(String base64) throws ...
- PHP 图片转base64编码 和 base64编码字符串转换成图片保存
1.图片转base64编码: /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ...
- java实现base64字符串转换成图片保存
现在不管是博客论坛还是企业办公,都离不开资源的共享.通过文件上传的方式,与大家同分享,从而达到大众间广泛的沟通和交流,我们既可以从中获得更多的知识和经验,也能通过他人的反馈达到自我改进和提升的目的. ...
- Vijos P1449 字符串还原【密码】
背景 小K是一位蔚蓝教主的崇拜者(Orz教主er),有一天,他收到了一封匿名信,信告诉了小K由于他表现出色,得到了一次当面Orz教主的机会,但是要当面Orz教主可不那么容易,不是每个人都有资格Orz教 ...
- Base64编码的字符串与图片的互转
用Flex写了一个例子,图片(暂时仅支持png.jpg/jpeg)转成base64编码的字符串(默认取上传文件的后缀名,然后添加了"data:image/(png|gif|jpg|jpeg) ...
- android将图片转成字符串,再将字符串转成图片
找了半天终于可以用了,终于转换成功了,由于要用来加密使用,所以现将要用到的图片转成了字符串,在用字符串转成图片,确切的说是Bitmap类型的,因为是新手,所一说法不是很规范,将其画出来 TestdAc ...
最新文章
- bzoj1208: [HNOI2004]宠物收养所
- 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
- PHP 解析xml(包含非英文字符)
- 手游引擎Unity和Cocos各有什么优劣?
- 多线程都调用一个函数,在这个函数中的一个局部变量什么情况会被修改
- 显示学生各科成绩和总成绩-面试被问到
- 2021年看得见的粉丝价值——五大平台KOL粉丝分析研究报告
- c语言 北京时间转换utc时间_PHP时间戳和日期相互转换操作
- bug 执行nrm 报错internal/validators.js:121 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value);
- Recovery真的不是难事!
- 阿里云盘下载安装保存文件教程
- MySQL集群Cluster
- 虚拟机安装与双系统(win10+ubuntu)安装及其他
- 井下三专两闭锁的内容_三专两闭锁
- JS——背景色的滑动效果以及输入框的状态切换效果实现
- a到z的ascii码值是多少_c语言 ASCLL码中 A~Z和a~z是多少
- 研发人员的工时为何需要管理?
- 智多星骗子行为让人发指
- [USA]办理美国签证,被Check
- 【目录和文件的管理】
热门文章
- MySQL三大范式详解(小白也能懂哦)
- 网易倩女找不到服务器,新倩女幽魂9月21日一直正在连接服务器_新倩女幽魂9月21日服务器一直连接解决办法_玩游戏网...
- Navicat Premium 15连接SQL sever (记录一下我的艰难历程,希望对大家有用,摸了半天终于连接上了)
- c语言字符串加减_C语言中指针的介绍
- 3种方法来卸载Ubuntu软件
- linux 查看和修改文件编码的方法
- INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系
- 小明分享|sigmstar SSD201/SSD202 针对MIPI的LCD屏配置操作说明分享,更多Sigmastar相关技术文档及沟通讨论,可以给小明留言,小明邀请你进入我们的技术沟通群
- 山东管理学院计算机专业在哪个校区,2019年山东管理学院新生在哪个校区及新生开学报到时间...
- php禁用了所有命令执行的函数 怎么搞,PHP通过bypass disable functions执行系统命令的方法汇总...