1

ASP.Net MVC-webapplicationのuploadpageを使用して、バイナリファイル/添付ファイルをPostgressデータベースに保存しています。これらの添付ファイルをコンソールプログラムでフェッチして内容をディスクに書き込むと、すべての添付ファイルに問題がなく、すべてを読み取ることができます。Webアプリケーションでまったく同じコードを実行すると、各添付ファイルのコンテンツ取得が破損します。これを引き起こしているのは何ですか?

これは私が使用しているコードです:

    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(); 
    }
4

1 に答える 1

0

これを試してみてください:

バイトを Web アプリに返す時点で、最初に base64 としてエンコードします。以下のコードは、私の 1 つのアプリで正確な目的のために機能します。

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

言及するのをほとんど忘れていました-その後、戻り値を画像のsrcとして使用します。必要に応じてタイプを変更します-私のものはpngでした。

これが役立つことを願っています。

于 2013-02-17T16:24:33.460 に答える