今天做一个截图上传到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字符串还原成原图片相关推荐

  1. ios objective-c将base64位编码字符串转换成图片

    碰到个好用的网站 http://www.base64-image.de/ NSString  *strData = @"/9j/4AAQSkZJRgABAQEAEwATAAD/2wBDAAY ...

  2. 转python 将base64字符串还原成图片保存

    转python 将base64字符串还原成图片保存 import os,base64 strs='''/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLC ...

  3. java 将base64字符串转换成图片

    package kf.ats.gvnsvr.client.taizhou.common; import java.io.OutputStream; import sun.misc.BASE64Deco ...

  4. base64字符串转化成图片

    /*** base64字符串转化成图片** @param base64* @return*/ public static File base64ToFile(String base64) throws ...

  5. PHP 图片转base64编码 和 base64编码字符串转换成图片保存

    1.图片转base64编码: /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ...

  6. java实现base64字符串转换成图片保存

    现在不管是博客论坛还是企业办公,都离不开资源的共享.通过文件上传的方式,与大家同分享,从而达到大众间广泛的沟通和交流,我们既可以从中获得更多的知识和经验,也能通过他人的反馈达到自我改进和提升的目的. ...

  7. Vijos P1449 字符串还原【密码】

    背景 小K是一位蔚蓝教主的崇拜者(Orz教主er),有一天,他收到了一封匿名信,信告诉了小K由于他表现出色,得到了一次当面Orz教主的机会,但是要当面Orz教主可不那么容易,不是每个人都有资格Orz教 ...

  8. Base64编码的字符串与图片的互转

    用Flex写了一个例子,图片(暂时仅支持png.jpg/jpeg)转成base64编码的字符串(默认取上传文件的后缀名,然后添加了"data:image/(png|gif|jpg|jpeg) ...

  9. android将图片转成字符串,再将字符串转成图片

    找了半天终于可以用了,终于转换成功了,由于要用来加密使用,所以现将要用到的图片转成了字符串,在用字符串转成图片,确切的说是Bitmap类型的,因为是新手,所一说法不是很规范,将其画出来 TestdAc ...

最新文章

  1. bzoj1208: [HNOI2004]宠物收养所
  2. 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
  3. PHP 解析xml(包含非英文字符)
  4. 手游引擎Unity和Cocos各有什么优劣?
  5. 多线程都调用一个函数,在这个函数中的一个局部变量什么情况会被修改
  6. 显示学生各科成绩和总成绩-面试被问到
  7. 2021年看得见的粉丝价值——五大平台KOL粉丝分析研究报告
  8. c语言 北京时间转换utc时间_PHP时间戳和日期相互转换操作
  9. bug 执行nrm 报错internal/validators.js:121 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value);
  10. Recovery真的不是难事!
  11. 阿里云盘下载安装保存文件教程
  12. MySQL集群Cluster
  13. 虚拟机安装与双系统(win10+ubuntu)安装及其他
  14. 井下三专两闭锁的内容_三专两闭锁
  15. JS——背景色的滑动效果以及输入框的状态切换效果实现
  16. a到z的ascii码值是多少_c语言 ASCLL码中 A~Z和a~z是多少
  17. 研发人员的工时为何需要管理?
  18. 智多星骗子行为让人发指
  19. [USA]办理美国签证,被Check
  20. 【目录和文件的管理】

热门文章

  1. MySQL三大范式详解(小白也能懂哦)
  2. 网易倩女找不到服务器,新倩女幽魂9月21日一直正在连接服务器_新倩女幽魂9月21日服务器一直连接解决办法_玩游戏网...
  3. Navicat Premium 15连接SQL sever (记录一下我的艰难历程,希望对大家有用,摸了半天终于连接上了)
  4. c语言字符串加减_C语言中指针的介绍
  5. 3种方法来卸载Ubuntu软件
  6. linux 查看和修改文件编码的方法
  7. INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系
  8. 小明分享|sigmstar SSD201/SSD202 针对MIPI的LCD屏配置操作说明分享,更多Sigmastar相关技术文档及沟通讨论,可以给小明留言,小明邀请你进入我们的技术沟通群
  9. 山东管理学院计算机专业在哪个校区,2019年山东管理学院新生在哪个校区及新生开学报到时间...
  10. php禁用了所有命令执行的函数 怎么搞,PHP通过bypass disable functions执行系统命令的方法汇总...