读取Web应用程序中的二进制数据会导致文件损坏

时间:2013-02-15 18:16:55

标签: c# .net asp.net-mvc postgresql-9.1

我使用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(); 
    }

1 个答案:

答案 0 :(得分:0)

您可能想尝试一下:

在您将字节返回给Web应用程序的位置 - 首先将其编码为base64。以下代码适用于我的一个应用程序。

thumbnail_url = @"data:image/png;base64," + Convert.ToBase64String(bytes);

几乎忘记提及 - 然后使用返回值作为图像的src。根据需要更改类型 - 我的是png。

我希望这会有所帮助。