读取网络应用程序中的二进制数据会导致文件损坏
本文关键字:文件 损坏 数据 二进制 网络 应用程序 读取 | 更新日期: 2023-09-27 17:59:40
我使用ASP.Net MVC Web应用程序中的uploadpage将二进制文件/附件存储在Postgress数据库中。如果我在控制台程序中获取这些附件并将内容写入磁盘,那么所有附件都很好,我可以读取所有附件。如果我在我的Webapp中执行完全相同的代码,那么每个附件的内容都会损坏。是什么原因造成的?
这是我正在使用的代码:
private void DumpBijlagen( )
{
NpgsqlConnection connection = null;
try
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
string connectionString = "Server=127.0.0.1;Port=5432;User Id=gtsys;Password=gtsys;Database=postgis20";
connection = new NpgsqlConnection( connectionString);
StringBuilder sb = new System.Text.StringBuilder( );
sb.AppendFormat( "select id, filename, filesize, created, data from web_bijlagen" );
string sql = sb.ToString( );
d.WriteLine( sql);
NpgsqlDataAdapter da = new NpgsqlDataAdapter( sql, connection);
da.Fill( ds);
dt = ds.Tables[ 0];
string filename = string.Empty;
int fileSize = 0;
byte[] bytes = null;
foreach( DataRow dr in dt.Rows)
{
filename = System.Convert.ToString ( dr[ "filename"]);
fileSize = System.Convert.ToInt32 ( dr[ "filesize"]);
bytes = dr[ "data"] as byte[];
WriteBijlage( filename, bytes);
}
DataDumper.Dump( dt);
connection.Close();
}
catch( System.Exception ex)
{
d.WriteLine( ex.Message);
}
finally
{
if( connection.State == System.Data.ConnectionState.Open)
{
connection.Close( );
}
}
}
private void WriteBijlage( string filename, byte[] bytes)
{
filename = string.Format( @"d:'Usr'Stephan'Junk'wBijlagen'{0}", filename);
FileStream fs = new FileStream ( filename, FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter ( new BufferedStream(fs));
bw.Write( bytes);
bw.Flush();
fs.Close();
bw.Close();
}
你可能想试试这个:
在将字节返回给web应用程序时,首先将其编码为base64。下面的代码在我的一个应用程序中起到了确切的作用。
thumbnail_url = @"data:image/png;base64," + Convert.ToBase64String(bytes);
差点忘了提一下——然后使用返回值作为图像的src。根据需要更改类型-我的是png。
我希望这能有所帮助。