怎么把转成的byte数组再转成之前的文件?

勇敢的心515 2010-07-28 03:04:38
我在Oracle中的一张表中有一个BLOB字段,我插入的时候是把文件转成Byte这样插入的,现在我想取出来,再把它存到另外一个文件家里面,不知道可以吗?
...全文
273 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
勇敢的心515 2010-07-30
  • 打赏
  • 举报
回复
问题已经解决,谢谢各位的帮助...
把代码贴出来给大家看下 。



////把文件以二进制的形势存到数据库里面去
MemoryStream ms = new MemoryStream();
string filepath = @"F:\曾方勇\呵呵.mp3";
FileStream fs = new FileStream(filepath, FileMode.Open);
Byte [] mediaByte=new Byte[fs.Length];
fs.Read(mediaByte,0,Convert.ToInt32(fs.Length.ToString()));
fs.Close();

OracleConnection con = new OracleConnection("Data Source=Orcl;User ID=zj;password=zj;");

OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandText = "P_insert_myMedia";
cmd.CommandType = CommandType.StoredProcedure;

OracleParameter a= cmd.Parameters.Add(new OracleParameter("media_id", OracleType.Number));
OracleParameter b= cmd.Parameters.Add(new OracleParameter("mediaFile", OracleType.Blob));


a.Value = 10000;

if (mediaByte.Length==0)
{
b.Value = System.DBNull.Value;
}
else
{
b.Value = mediaByte;
}


con.Open();
cmd.ExecuteNonQuery();
con.Close();

////从数据库里面读出来二进制数据,再生成文件
OracleConnection con = new OracleConnection("Data Source=Orcl;User ID=zj;password=zj;");

OracleDataAdapter oda = new OracleDataAdapter("select * from multi_media", con);

DataTable dt = new DataTable();

oda.Fill(dt);

Byte [] media =(Byte [])dt.Rows[1]["multi_media"];

Random r = new Random();

string fileName = r.Next(1, 100).ToString();

string fullPath = @"F:\"+fileName+".mp3";

//System.IO.File.WriteAllBytes(fullPath, media);

FileStream fs = new FileStream(fullPath, FileMode.Create);
//BinaryWriter writer = new BinaryWriter(fs);

//writer.Write(media);
//writer.Close();
fs.Write(media,0,media.Length);
fs.Close();



polarissky 2010-07-29
  • 打赏
  • 举报
回复
filestram,看放歌的
勇敢的心515 2010-07-29
  • 打赏
  • 举报
回复


终于等到两个 。。
我用了一个txt试了,读出来的里面没的内容,是那中System.Byte[] 形式的
hitlcyu19 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wuyazhe 的回复:]

try
C# code
System.IO.File.WriteAllBytes(@"F:\曾方勇\oo.txt",dt.Rows[0][1] as byte[]);
[/Quote]
这个就可以 试试吧
wanghui0380 2010-07-29
  • 打赏
  • 举报
回复
写入fileStream即可
勇敢的心515 2010-07-29
  • 打赏
  • 举报
回复

每天回帖即可获得十分可用分,你们不来我自己来回!
兔子-顾问 2010-07-28
  • 打赏
  • 举报
回复
try
System.IO.File.WriteAllBytes(@"F:\曾方勇\oo.txt",dt.Rows[0][1] as byte[]);
勇敢的心515 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 forever9918 的回复:]
你应该反序列化数据
[/Quote]

不是吧,那么麻烦?
forever9918 2010-07-28
  • 打赏
  • 举报
回复
你应该反序列化数据
勇敢的心515 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaozhi_5638 的回复:]
C# code

byte[] media = Encoding.Default.GetBytes( dt.Rows[0][1].ToString());
string fullPath = @"F:\曾方勇\oo.txt";
FileStream fs = new FileStream(fullPath, FileMode.C……
[/Quote]

楼上的Txt文本里面还是System.Byte[], 没有之前的数据了。
请叫我卷福 2010-07-28
  • 打赏
  • 举报
回复

byte[] media = Encoding.Default.GetBytes( dt.Rows[0][1].ToString());
string fullPath = @"F:\曾方勇\oo.txt";
FileStream fs = new FileStream(fullPath, FileMode.Create,FileAccess.Write);
fs.Write(media,0,media.Length);
fs.Close();


注意txt的编码
其实最好在存入数据库之前 要记住原文件的的格式 不一定是txt格式的
勇敢的心515 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aluogang 的回复:]
BLOB字段什么类型?如果是varchar这类的话,LZ可以去看看这个
http://blog.163.com/sunl_zju/blog/static/66744355200961211390526/
[/Quote]


BLOB 是Oracle里面的数据类型,是专门用来存储二进制数据的,比如音频,视频等等
aluogang 2010-07-28
  • 打赏
  • 举报
回复
BLOB字段什么类型?如果是varchar这类的话,LZ可以去看看这个
http://blog.163.com/sunl_zju/blog/static/66744355200961211390526/
勇敢的心515 2010-07-28
  • 打赏
  • 举报
回复
我的意思是用Byte转成的文件和原来的文件要是一样的、
勇敢的心515 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zgke 的回复:]
System.IO.File.WriteAllBytes(@"C:\??????",byte[]);
[/Quote]

File file=new ?

我是这样写的:



byte [] media = Encoding.Default.GetBytes( dt.Rows[0][1].ToString());

MemoryStream ms = new MemoryStream(media);

string fullPath = @"F:\曾方勇\oo.txt";



FileStream fs = new FileStream(fullPath, FileMode.Create,FileAccess.Write);
ms.WriteTo(fs);
ms.Close();
fs.Close();


文件是有了,但是里面的内容是System.Byte[];
myhope88 2010-07-28
  • 打赏
  • 举报
回复
肯定可以的,这个是文件流的读取操作而已
勇敢的心515 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zgke 的回复:]
System.IO.File.WriteAllBytes(@"C:\??????",byte[]);
[/Quote]

谢谢,先试下
zgke 2010-07-28
  • 打赏
  • 举报
回复
System.IO.File.WriteAllBytes(@"C:\??????",byte[]);

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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