代码:
@RequestMapping(value="/xxxxx", method = {RequestMethod.POST})
public Map<String, String> SAVEBANNER(HttpServletRequest request){
Map<String, String> map = new HashMap<String, String>();
try {
String img = request.getParameter("data");
TypeToken<List<BannerForm>>type=new TypeToken<List<BannerForm>>(){};
Gson gson = new Gson();
List<BannerForm> imgs = gson.fromJson(img, type.getType());
int count = 1; // 图片顺序标识
for(int i = 0; i < imgs.size(); i++){
if(imgs.get(i).getImgOfBase64().equals("") == false &&
imgs.get(i).getLink().equals("") == false){
String str = imgs.get(i).getImgOfBase64(); /* 此处的数字 【0】对应页面中的图片下标 */
String imgStr = str.split("base64,")[1];
imgStr = imgStr.replace(" ", "+");
System.err.println(imgStr);
//对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
System.err.println("没有接收到BASE64数据!");
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int j=0;j<b.length;++j)
{
if(b[j]<0)
{//调整异常数据
b[j]+=256;
}
}
//生成jpeg图片
String imgFilePath = "D:\\carsoulIMG" + count + ".jpg";//新生成的图片 /vegetable-distribution/src/main/webapp/static/images/banner/new.jpg
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
count++;
}catch (Exception e)
{
e.printStackTrace();
map.put("result", "保存失败!");
return map;
}
}
}
if(count == 1){
map.put("result", "没有符合条件的数据!");
return map;
}else{
map.put("result", "保存成功!");
return map;
}
} catch (JsonSyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
map.put("result", "保存失败!");
return map;
}
}
解释:接收的数据data为json格式的BannerForm的数组
Base64转图片用到的jar包:java自带的 sun.misc.BASE64Decoder;
由于需要输出图片,所以还需要导入java io流的包
java.io.FileOutputStream;
java.io.OutputStream;
BannerForm主要字段:imgOfBase64【Base64格式的图片数据】
*注意:转换Base64格式的图片数据需要去掉Base64数据头,即:【base64,】之前的全部数据.
由于编码问题,后台接收的Base64格式的图片数据中,需要把数据中的空格全部替换为'+'号.