一张图片的BASE64码转成二进制,存到sql 中,从sql中读出来再转成base64前后不一致。

问一个问题,一张图片的BASE64码转成二进制,存到sql 中, 图片说明

图片说明是当我从SQL中取出来,再转成BASE64的时候发现结果不一致,这是什么原因?我错在哪里了?

你这样,用winhex打开相同的两个文件,看看对比一下,少了啥东西完后对应代码去看

你第一张图没用Base64啊?
也许编码不同?

Photo就是一张图片的base64码。

这里面最好注明下环境,首先要说下是你用的是什么数据库?存放的二进制数组的字段类型是什么?不同的数据库跟数据类型都有可能不一样。对于Sql Server数据库,存放二进制的数据类型是SqlDbType.Binary,但这个类型有长度限制,最长只到8000。所以二进制长度超过8000的话,存放进去可能被截断。
其次,一般数据库dll组件会有提供相应类型的数据获取方法。如果是SqlDbType.Binary的话,建议是用SqlDataReade对应的GetSqlBinary方法获取SqlBinary对象,再调用SqlBinary对象的valuen属性获取byte[]值,减少出现转码问题。
最后,Photo属性赋值的是BASE64字符串,存进数据库里的本般就是BASE64的二进制,从数据库获取后,直接二进制转成字符串就行了,不用调用Convert.ToBase64String。Convert.ToBase64String的作用是转成BASE64字符串。你代码的转换过程如下
源数据->byte[]->调用ToBase64String->转换后的base64字符串;
存到数据库的过程:转换后的base64字符串->byte[]->数据库;
从数据库读取:数据库->byte[]->调用ToBase64String->二次转换后的base64字符串。
最终取出后相当于转了两次base64码,所以从数据库获取后调用Encoding.Default.GetString()方法转成字符串就行了,不需要调用ToBase64String。

最后我用myEmployee.Photo = Encoding.UTF8.GetString(imageData);得出了原先的值。

想问您一下怎么将base64存入数据库,数据库怎么设计 .net mvc +_ sqlserver