Base-64 字符数组或字符串的长度无效等问题解决方案
项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件……后沟通后,ActiveX控件方提供一个接口,返回相关截图文件的Base64编码字符串,由Web应用程序转换为对应格式,存储在服务器即可。
遇到问题:
Base-64 字符数组或字符串的长度无效
直接调用Convert.FromBase64String方法时,报“Base-64 字符数组或字符串的长度无效”的错误。
MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64));
于是想到对ActiveX返回的Base64字符串进行编码操作
base64 = System.Web.HttpUtility.HtmlEncode(base64);
MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64));
运行程序,报“输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符”错误。
最终解决方案:
对Base64字符串进行特殊字符替换,并进行PadRight操作,解决问题
string dummyData = base64.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
if (dummyData.Length % > )
{
dummyData = dummyData.PadRight(dummyData.Length + - dummyData.Length % , '=');
}
MemoryStream stream = new MemoryStream(Convert.FromBase64String(dummyData));
最后提供一下封装的Base64Helper类,提供Base64字符串与文件之间相互转换操作。
/// <summary>
/// Base64编码字符串与文件转换帮助泪
/// </summary>
public class Base64Helper
{
/// <summary>
/// Base64编码字符串转文件
/// </summary>
/// <param name="base64">Base64编码字符串</param>
/// <param name="filename">文件完整路径</param>
public static void ConvertBase64ToFile(string base64, string filename)
{
//base64 = "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";
string dummyData = base64.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
if (dummyData.Length % > )
{
dummyData = dummyData.PadRight(dummyData.Length + - dummyData.Length % , '=');
}
MemoryStream stream = new MemoryStream(Convert.FromBase64String(dummyData));
//filename = @"C:\Users\admin\Desktop\Tongji\test.jpg";
Bitmap img = new Bitmap(stream);
img.Save(filename);
} /// <summary>
/// 文件转Base64编码字符串
/// </summary>
/// <param name="fileName">文件完整路径</param>
/// <returns></returns>
public static string ConvertFileToBase64(string fileName)
{
//fileName = @"C:\Users\admin\Desktop\Tongji\test.jpg";
FileStream fs = File.OpenRead(fileName);
BinaryReader br = new BinaryReader(fs);
byte[] bt = br.ReadBytes(Convert.ToInt32(fs.Length));
string base64String = Convert.ToBase64String(bt);
return base64String;
}
}
Base-64 字符数组或字符串的长度无效等问题解决方案的更多相关文章
- Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)
Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a n ...
- C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决
最近用base64编码传图片遇到了点问题,总结下. 首先总结下base64编码的逻辑,来自网络:https://www.cnblogs.com/zhangchengye/p/5432276.html ...
- c语言字符数组与字符串的使用详解
转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...
- c语言中的字符数组与字符串
1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...
- [日常] C语言中的字符数组和字符串
c语言字符数组和字符串:1.存放字符的数组称为字符数组 char str[]2.'\0'也被称为字符串结束标志3.由" "包围的字符串会自动在末尾添加'\0'4.逐个字符地给数组赋 ...
- C++基础之字符数组和字符串
无意中发现了一个非常有意思的技术类型小品文系列,通过大牛指导菜鸟的方式,解说讲C++知识,有的非常基础却是开发中easy忽略的地方. [Elminster的专栏] http://blog.csdn.n ...
- 灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?
限时 1 秒钟给出答案,来来来,听我口令:"Java 如何获取数组和字符串的长度?length 还是 length()?" 在逛 programcreek 的时候,我发现了上面这个 ...
- Linux C\C++基础 字符数组、字符串和字符串常量
1.字符数组和字符串 C语言没有字符串类型,用字符数组模拟 字符串一定是字符数组,字符数组不一定是字符串 如果字符数组以字符'\0'('\0'等同与数字0)结尾,那么这个字符数组就是字符串 char ...
- C语言中整形数组、字符数组、字符串的区别
一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...
随机推荐
- Cocos2d Android 环境搭建
1.在开始之前,需要先准备好资源如下,如果安卓开发环境有了直接装第3.4. 1.JDK 点击下载 (1.6) 2.ADT(已经自带Android SDK)点击下载 3.NDK 点击下载 4. ...
- potrace源码分析一
1 简介 potrace是由Dalhousie University的Peter Selinger开发一款位图轮廓矢量化软件,该软件源码是可以公开下载的,详细见项目主页:http://potrace. ...
- Solr高级查询Facet
一.什么是facet solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索. facet主要用于导航实现渐进式精确搜索 ...
- 编写自己的PHP MVC框架笔记
1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...
- Java多态性——分派
一.基本概念 Java是一门面向对象的程序设计语言,因为Java具备面向对象的三个基本特征:封装.继承和多态.这三个特征并不是各自独立的,从一定角度上看,封装和继承几乎都是为多态而准备的.多态性主要体 ...
- fir.im Weekly - 关于 iOS10 适配、开发、推送的一切
"小程序"来了,微信变成名副其实的 Web OS,新一轮的Web App 与Native App争论四起.程序员对新技术永远保持灵敏的嗅觉和旺盛的好奇心,@李锦发整理了微信小程序资 ...
- “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
火热的MVVM框架 最近几年最热门的技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出不穷,而在众多前端框架中具有MVC,MVVM功能的框架成为耀眼新星,比如GitHub关注度很高的Vu ...
- hibernate的基本xml文件配置
需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...
- SQL 提示介绍 hash/merge/concat union
查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...
- appserv 安装php的memcache扩展。
http://www.cnblogs.com/yiluxiuxing/p/4267709.html 1. 新建一个phpinfo,查看版本号 2. http://museum.php.net/php5 ...