0

ファイルを SQL Server データベースに正常にアップロードしました。情報を GridView に戻すことができます。実際にファイルを開くためのハイパーリンクを作成する方法がわかりません。

4

4 に答える 4

2

写真を処理し、DB コンテンツを応答ストリームに返す URL を作成する必要があります。SQL Saturday #26で、私はまさにこれを示すプレゼンテーションを行いました。リンクから私のスライドを実行し、Demo 2 に移動すると、lotsOfPictures ソリューションで Picture.aspx.cs を見つけることができます。

using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();

                SqlCommand cmd = new SqlCommand(
@"SELECT picture 
FROM resized_pictures 
WHERE picture_id = @id
AND picture_size = @size;", conn);
                cmd.Parameters.AddWithValue("@id", pictureId);
                cmd.Parameters.AddWithValue("@size", size);

                using (SqlDataReader rdr = cmd.ExecuteReader(
                    CommandBehavior.SequentialAccess))
                {
                    if (rdr.Read())
                    {
                        Response.ContentType = "image/jpeg";
                        byte[] bytes = new byte[1024];
                        long offSet = 0;
                        int countRead = (int) rdr.GetBytes(
                            0, offSet, bytes, 0, 1024);
                        while (countRead > 0)
                        {
                            Response.OutputStream.Write(bytes, 0, countRead);
                            offSet += countRead;
                            countRead = (int)rdr.GetBytes(
                                0, offSet, bytes, 0, 1024);
                        }
                    }
                }
            }

パズルの重要なピースは、真のストリームを返す SqlCommand リーダーに渡される SequentialAccess フラグです。そのため、ページは戻る前にイメージ全体をメモリにロードしません。高性能サーバーの場合、ASP.NET 2.0 の非同期ページで説明されているように、非同期操作を使用する必要があります。

于 2009-10-23T19:21:11.430 に答える
0

通常、サーバー側のコードを使用して適切なヘッダーを送信し、コンテンツをエコーするだけです。

PHPマニュアルから:

// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
于 2009-10-23T17:51:46.510 に答える
0

ファイルがデータベースに保存されている場合は、おそらくブログまたはバイト配列として保存されています。ハイパーリンクのクリック イベントでは、バイト配列をストリームに渡し、ストリーム ライターを使用してファイルを作成する必要があります。次に、ファイルを実行します。

于 2009-10-23T19:08:28.490 に答える
0

自分でこれを試したことはありませんが、データをローカル ファイル システムの一時ファイルにストリーミングしてから、その一時ファイルへのリンクを提供するのはどうでしょうか。

于 2009-10-23T17:33:16.703 に答える