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

本文关键字:文件 损坏 数据 二进制 网络 应用程序 读取 | 更新日期: 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。

我希望这能有所帮助。