将字符串用Base64解码后保存成Pdf格式的问题,求大牛 急

happyer_longlong 2015-07-02 10:18:20
问题描述: 我将获得的string用Base64解码后再保存成Pdf格式的文件,现在问题是保存后打开pdf里面是空白的没数据,能打开说明应该pdf格式应该是没问题的,脑死人了,求大牛支支招:


code:
1 Base64解码

byte[] data = Convert.FromBase64String(Base64String);
string decodedString = Encoding.UTF8.GetString(data);
return decodedString;


2 将解码的string保存成文件

byte[] pdfbyte = System.Text.Encoding.ASCII.GetBytes(content);
//设置保存的文件名companyId, userId 不用管 是个int 的参数
var filename = FileHelper.GenFileName(companyId, userId, "ShipStation_") + ".pdf";
//保存文件
using (var mem = new MemoryStream(pdfbyte))
{
using (var file = new FileStream(filename, FileMode.Create, FileAccess.Write))
{
mem.WriteTo(file);
}
}
...全文
3028 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29355277 2017-10-19
  • 打赏
  • 举报
回复
大神,我现在也遇到这个问题,求解,急急急!!谢谢
sinat_37712922 2017-03-01
  • 打赏
  • 举报
回复
public void Base64StringToFile(string strbase64, string strurl) { try { strbase64 = strbase64.Replace(' ', '+'); MemoryStream stream = new MemoryStream(Convert.FromBase64String(strbase64)); FileStream fs = new FileStream(strurl, FileMode.OpenOrCreate, FileAccess.Write); byte[] b = stream.ToArray(); //byte[] b = stream.GetBuffer(); fs.Write(b, 0, b.Length); fs.Close(); } catch (Exception e) { } }
sinat_37712922 2017-03-01
  • 打赏
  • 举报
回复
生成文件可以,但是数字和字母都可以正常显示,中文就乱码,怎么encoding都不行。
shipei515 2016-05-14
  • 打赏
  • 举报
回复
byte[] picByte = Base64.decodeBase64(picData) 解码后直接写文件就可以了,刚做了可以生成文件
O_OQAQ 2015-07-03
  • 打赏
  • 举报
回复
引用 11 楼 u013687415 的回复:
byte[] data = Convert.FromBase64String(Base64String);
直接保存这个data就可以了吧,不用下面的转码了
O_OQAQ 2015-07-03
  • 打赏
  • 举报
回复
byte[] data = Convert.FromBase64String(Base64String);
Poopaye 2015-07-02
  • 打赏
  • 举报
回复
引用 4 楼 happyer_longlong 的回复:
[quote=引用 3 楼 shingoscar 的回复:] 看错了,你直接用解码的数据保存不就可以了?
byte[] data = Convert.FromBase64String(Base64String);
var filename = FileHelper.GenFileName(companyId, userId, "ShipStation_") + ".pdf";
//保存文件
    using (var mem = new MemoryStream(data))
     {
           using (var file = new FileStream(filename, FileMode.Create, FileAccess.Write))
           {
              mem.WriteTo(file);
           }
    }
对方返回的就是个Base64编码的pdf 文件流,我接收之后用Base64解码 保存,但是打开都是空白的,大小都一样12k [/quote] 你贴出来的方法还有一堆用Encoding转码的代码,要全部删除,直接用base64解码的数据保存 如果还是不对,只好用二进制比较看看哪里不对
happyer_longlong 2015-07-02
  • 打赏
  • 举报
回复
%PDF-1.4 %???? 2 0 obj <</Length 62/Filter/FlateDecode>>stream x?+?r 这是个文件头,看起来应该是正确的,但是打开就是傻都没有
happyer_longlong 2015-07-02
  • 打赏
  • 举报
回复
引用 3 楼 shingoscar 的回复:
看错了,你直接用解码的数据保存不就可以了?
byte[] data = Convert.FromBase64String(Base64String);
var filename = FileHelper.GenFileName(companyId, userId, "ShipStation_") + ".pdf";
//保存文件
    using (var mem = new MemoryStream(data))
     {
           using (var file = new FileStream(filename, FileMode.Create, FileAccess.Write))
           {
              mem.WriteTo(file);
           }
    }
对方返回的就是个Base64编码的pdf 文件流,我接收之后用Base64解码 保存,但是打开都是空白的,大小都一样12k
Poopaye 2015-07-02
  • 打赏
  • 举报
回复
看错了,你直接用解码的数据保存不就可以了?
byte[] data = Convert.FromBase64String(Base64String);
var filename = FileHelper.GenFileName(companyId, userId, "ShipStation_") + ".pdf";
//保存文件
    using (var mem = new MemoryStream(data))
     {
           using (var file = new FileStream(filename, FileMode.Create, FileAccess.Write))
           {
              mem.WriteTo(file);
           }
    }
Poopaye 2015-07-02
  • 打赏
  • 举报
回复
pdf又不是文本文件,你至少要个pdf的库 http://www.codeproject.com/KB/dotnet/PdfLibrary.aspx
於黾 2015-07-02
  • 打赏
  • 举报
回复
断点调试啊,先看解析出来的字符串对不对,再谈字符串如何保存成文件
xuzuning 2015-07-02
  • 打赏
  • 举报
回复
贴出你的真实代码 应该是文档中的二进制数据被你破坏了
於黾 2015-07-02
  • 打赏
  • 举报
回复
而且你将转码成UTF-8的字符串又按ASCII解码,到底是啥意思? 反正你这个逻辑我是没看懂
於黾 2015-07-02
  • 打赏
  • 举报
回复
既然存进去的就是文件流,那么你应该base64转码之后,直接保存byte数组 而不是将byte数组又按UTF-8转码成字符串再保存
happyer_longlong 2015-07-02
  • 打赏
  • 举报
回复
用文件比较了,没数据

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧