请教下BASE64编码问题

问题描述

我从网页发送一张描绘在canvas图片给后台,直接用JavaScript的.toDataURL("image/png")的BASE64编码发到后台接收,解码成byte[]然后保存成PNG图片,但图片一遍黑,还有后台保存的黑图片明显比我在网页另存为少几K我测过是BASE64数据,而且后台的跟前台一模一样,没看出有什么错代码贴上:packagecn.create.servlet;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.codec.binary.Base64;@WebServlet("/AcceptFileServlet")publicclassAcceptFileServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicAcceptFileServlet(){super();}protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");Stringpath=request.getSession().getServletContext().getRealPath("/images/");//路径StringimageData=request.getParameter("imageData");byte[]imageByte=decodeBase64(imageData);saveFile(imageByte,path);System.out.print(imageData);}publicbyte[]decodeBase64(StringimageData){byte[]imageByte=null;//删除标记intdou=imageData.indexOf(",");imageData=imageData.substring(dou+1);booleanyes=Base64.isBase64(imageData);imageByte=Base64.decodeBase64(imageData);for(inti=0;i<imageByte.length;++i){if(imageByte[i]<0){//调整异常数据imageByte[i]+=256;}}returnimageByte;}publicvoidsaveFile(byte[]imageByte,Stringpath){Filefile=newFile(path+"/test.png");FileOutputStreamoutStream=null;try{outStream=newFileOutputStream(file);outStream.write(imageByte);}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{try{outStream.flush();outStream.close();}catch(IOExceptione){e.printStackTrace();}}}}

解决方案

解决方案二:
找到问题了,是因为url传值到后台的时候,接受的数据会把+号变成空格,问题解决是就是把空格替换还原为+号。哎,没人答!

时间: 2024-11-01 14:19:58

请教下BASE64编码问题的相关文章

关于base64编码的原理及实现方法分享_相关技巧

一.Base64编码原理 步骤1:将所有字符转化为ASCII码:步骤2:将ASCII码转化为8位二进制:步骤3:将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位:步骤4:统一在6位二进制前补两个0凑足8位:步骤5:将补0后的二进制转为十进制:步骤6:从Base64编码表获取十进制对应的Base64编码: 说明:不足3个补0的最终Base64编码为=,而不是A! 二.Base64编码示例 示例一:zyq对应Base64编码为enlx 示例二:mzwu对应Base64编码为

编码-请教下关于springmvc简单例子出错问题

问题描述 请教下关于springmvc简单例子出错问题 警告: No mapping found for HTTP request with URI [/springmvc4/test1/helloworld] in DispatcherServlet with name 'springmvc' 运行后一直报错. 我贴下代码 各位帮我看下 web配置: <?xml version="1.0" encoding="UTF-8"?> springMVC1 i

base64编码类------源代码(C#)

编码|源代码 using System; namespace shapBse64{ /// <summary> /// 有关base64编码算法的相关操作 ///By 自由奔腾(wgscd) /// </summary> public class SBase64 { public SBase64() { // // TODO: 在此处添加构造函数逻辑 // } //-----------------------------------------------------------

Python base64编码解码实例

  这篇文章主要介绍了Python base64编码解码实例,本文直接给出实例代码,使用也很简单,需要的朋友可以参考下 Python中进行Base64编码和解码要用base64模块,代码示例: ? 1 2 3 4 5 6 7 #-*- coding: utf-8 -*- import base64   str = 'cnblogs' str64 = base64.b64encode(str) print str64 #Y25ibG9ncw== print base64.b64decode(str

JavaScript:详解Base64编码和解码

Base64是最常用的编码之一,比如开发中用于传递参数.现代浏览器中的<img />标签直接通过Base64字符串来渲染图片以及用于邮件中等等.Base64编码在RFC2045中定义,它被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式. 我们知道,任何数据在计算机中都是以二进制的方式存储的.一个字节为8位,一个字符在计算机中存储为一个或多个字节,比如英文字母.数字以及英文标点符号就是用一个 字节来存储的,通常称为ASCII码.而http://ww

代码-老师 请教下,C#问题 对文本内容操作

问题描述 老师 请教下,C#问题 对文本内容操作 C# 怎么样删除 文本中 的 一点内容,比如 现在有个文本是 F:11.txt. 内容: 张三|软件学院|1439同学 张四|软件学院|1439同学 张五|软件学院|1439同学 现在 要删除 张四|软件学院|1439同学 我大概知道怎么做 ,就是 对文本内容 进行扫描,把扫描的内容 使用ArrartLis类 ,添加 到数组里,再进行 删除, 再又进行重写, 代码 这可怎么写?? 解决方案 强烈建议用List而不是用ArrayList 这涉及一个

减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)

原文:减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术) 在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 "利用将小图标合成一张背景图来减少HTTP请求",那么,这一篇博文将讲解  " 将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片". 一.为何选择将图片转成二进制并生成Base64编

【前端攻略】:玩转图片Base64编码

原文:[前端攻略]:玩转图片Base64编码 引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的Base64编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的base64编码.标题略大,不过只是希望通过一些浅显的论述,让你知道什么是图片的base64编码,为什么我们要用它,我们如何使用并且方便的使用它,并让你懂得如何去在前端的实际工作中运用它.   什么是base64编码? 我不是来讲概念的,直接切入正题,图片的base64编码就是可以将一副图片数据编码成一串字符串,

URL安全的Base64编码

Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到. 然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的「/」和「+」字符变为形如「%XX」的形式,而这些「%」号在存入数据库时还需要再进行转换,因为ANSI SQL中已将「%」号用作通配符. 为解决此问题,可采用