Base-64 字符串中的无效字符

问题描述

各位大神,最近用阿里云的OSS,我把字符串用gzip算法压缩后上传到服务器,再取回来,解压,值没变,但为什么解压不了?报“Base-64字符串中的无效字符”的错误,求各位大神们帮忙看看?代码如下:classProgram{staticStringaccessKeyId="******";staticStringaccessKeySecret="******";staticStringbucketName="***";publicstaticboolputObject(StringbucketName,Stringkey,StringstrData){try{//初始化OSSClientbyte[]dataBytes;//Compress(Convert.FromBase64String(Data));OssClientclient=newOssClient(accessKeyId,accessKeySecret);//创建上传Object的MetadataObjectMetadatameta=newObjectMetadata();using(MemoryStreamms=newMemoryStream()){using(StreamWritersw=newStreamWriter(ms,Encoding.UTF8)){sw.Write(strData);sw.Flush();ms.Position=0;dataBytes=ms.ToArray();meta.ContentLength=dataBytes.Length;PutObjectResultresult=client.PutObject(bucketName,key,ms,meta);returntrue;}}//打印ETag//System.out.println(result.getETag());}catch(Exceptionex){returnfalse;}}publicstaticstringgetObject(StringbucketName,Stringkey){//初始化OSSClientOssClientclient=newOssClient(accessKeyId,accessKeySecret);//获取Object,返回结果为OSSObject对象OssObjectossobj=client.GetObject(bucketName,key);//获取Object的输入流byte[]buffer=newbyte[4096];byte[]dataBytes;using(MemoryStreamms=newMemoryStream()){//上传Object.intlength=0;while((length=ossobj.Content.Read(buffer,0,4096))>0){ms.Write(buffer,0,length);}ms.Position=0;dataBytes=ms.ToArray();}returnSystem.Text.Encoding.UTF8.GetString(dataBytes);}staticvoidMain(string[]args){stringss="123456";ss=GZipCompressString(ss);strings=GZipDecompressString(ss);stringkey="SYGLDB_Demo/ss.txt";boolb=putObject(bucketName,key,ss);Console.WriteLine(b);ss=getObject(bucketName,key);ss=GZipDecompressString(ss);Console.WriteLine(ss);Console.Read();}#regionGZip///<summary>///将传入字符串以GZip算法压缩后,返回Base64编码字符///</summary>///<paramname="rawString">需要压缩的字符串</param>///<returns>压缩后的Base64编码的字符串</returns>publicstaticstringGZipCompressString(stringrawString){if(string.IsNullOrEmpty(rawString)||rawString.Length==0){return"";}else{byte[]rawData=System.Text.Encoding.UTF8.GetBytes(rawString.ToString());byte[]zippedData=Compress(rawData);return(string)(Convert.ToBase64String(zippedData));}}///<summary>///GZip压缩///</summary>///<paramname="rawData"></param>///<returns></returns>privatestaticbyte[]Compress(byte[]rawData){MemoryStreamms=newMemoryStream();GZipStreamcompressedzipStream=newGZipStream(ms,CompressionMode.Compress,true);compressedzipStream.Write(rawData,0,rawData.Length);compressedzipStream.Close();returnms.ToArray();}///<summary>///将传入的二进制字符串资料以GZip算法解压缩///</summary>///<paramname="zippedString">经GZip压缩后的二进制字符串</param>///<returns>原始未压缩字符串</returns>publicstaticstringGZipDecompressString(stringzippedString){if(string.IsNullOrEmpty(zippedString)||zippedString.Length==0){return"";}else{byte[]zippedData=Convert.FromBase64String(zippedString.ToString());return(string)(System.Text.Encoding.UTF8.GetString(Decompress(zippedData)));}}///<summary>///ZIP解压///</summary>///<paramname="zippedData"></param>///<returns></returns>privatestaticbyte[]Decompress(byte[]zippedData){MemoryStreamms=newMemoryStream(zippedData);GZipStreamcompressedzipStream=newGZipStream(ms,CompressionMode.Decompress);MemoryStreamoutBuffer=newMemoryStream();byte[]block=newbyte[1024];while(true){intbytesRead=compressedzipStream.Read(block,0,block.Length);if(bytesRead<=0)break;elseoutBuffer.Write(block,0,bytesRead);}compressedzipStream.Close();returnoutBuffer.ToArray();}#endregion}

解决方案

解决方案二:
自己仔细检查吧,应该是小问题.
解决方案三:
这么长的代码,而且你也没标出来是哪行抛错撸主单步调试一下,应该可以自己解决掉的实在不行,把报错行的代码定位出来,这样人家才方便帮你分析。

时间: 2024-12-31 18:58:14

Base-64 字符串中的无效字符的相关文章

C#编译.resx文件base64字符串中的无效字符

问题描述 VB重新生成解决方案,一直有一个错误: <IMGsrc="file:///C:UsersbicAppDataRoamingfeiqRichOle1191289754.bmp"> 解决方案 解决方案二: 图片没显示出来

c语言-C语言程序在字符串中查找某字符

问题描述 C语言程序在字符串中查找某字符 #include int main(void) { int i, j; char ab[80]; char x; printf("Input a character: "); scanf("%c",&x); printf("Input a string: "); gets(ab); for(i=0;i<16;i++) if (ab[i]==x) j=i; printf("index

js replace(a,b)之替换字符串中所有指定字符的方法_javascript技巧

如下所示: var str = 'abcadeacf'; var str1 = str.replace('a', 'o'); alert(str1); // 打印结果: obcadeacf var str2 = str.replace(/a/g, 'o'); alert(str2); //打印结果: obcodeocf, 注意: 此处replace的第一个参数为正则表达式,/g是全文匹配标识. 以上这篇js replace(a,b)之替换字符串中所有指定字符的方法就是小编分享给大家的全部内容了,

php 自定字符串中的部分字符进行替换方法

php教程 自定字符串中的部分字符进行替换方法 substr_replace()函数对自定字符串中的部分字符进行替换    语法:substr_replace(str,repl,start,[int length])    语法说明:    str--必选参数,指定要操作的原始字符串    repl--指定替换后的新字符串    start--指定替换字符串的开始位置    length--可选参数,指定返回字符串的长度.    使用substr_replace()函数替换字符串的应用实例: 实

Lua判断字符串中包含中文字符的方法和计算字符串宽度函数分享_Lua

一.判断字符串中包含中文字符的方法 遍历数组,对每个字节使用string.byte(),发现有大于127的,就是汉字,可以参照下面的代码. 二.计算字符串宽度函数 复制代码 代码如下: -- 计算字符串宽度   local str = "Jimmy: 你好,世界!" local fontSize = 20 local lenInByte = #str local width = 0   for i=1,lenInByte do     local curByte = string.by

从字符串中取一个字符作为数组元素

从字符串中取一个字符作为数组元素 public class mainclass {   public static void main(string[] arg) {     string text = "to be or not to be";        // define a string     byte[] textarray = text.getbytes();         for(byte b: textarray){       system.out.printl

js 除去字符串中的重复字符的正则表达

  <html> <head> <title>利用正则表达法除去字符串中的重复字符</title> </head> <body> <script language="网页特效"> str = "google" str1 = str.replace(/(.).*/g,"$1") document.write(str + "<br>")

三种java 去掉字符串中的重复字符函数

三种java 去掉字符串中的重复字符函数 */ public static void main(string[] args) {         system.out.println(removerepeatedchar("ddddccffgd"));     }     public static string removerepeatedchar(string s) {         if (s == null)             return s;         str

经典算法面试题目-设计算法移除字符串中重复的字符(1.3)

题目 Design an algorithm and write code to remove the duplicate characters in a string without using any additional buffer. NOTE: One or two additional variables are fine. An extra copy of the array is not. FOLLOW UP Write the test cases for this metho