1

asp.net アプリケーションを更新し、mssql データベースからドキュメントを保存および取得しています。保存は非常に簡単でしたが、データベースから直接ダウンロードするアン​​カーからファイルをダウンロードする方法はありますか? そのブロブがグリッドビューまたはその他のデータコントロール内にバインドされているとしましょう。たとえば、次のようにします<a href="<%#Eval("blobcolumn")%">Download Doc</a>。ファイル名も保存します。

4

2 に答える 2

3

まず、画像を href 要素に割り当てるのではなく、img タグを作成して画像を表示し、次に href タグを使用して画像をダウンロードするか、画像タグを href に直接埋め込みます。

<a href="http://somelink.com"><img src="<%#Eval("blobcolumn")%></img></a>

次に、ファイルへの URL を指定せずに画像をインラインで表示するには、データ URIが必要です。これは、base-64 バージョンの画像が Web ページに埋め込まれていることを意味します。

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

このアプローチは、Web サーバー内の画像に実際の URL を提供した場合のように画像がキャッシュされないため (つまり、/images/reddot.png )。

画像のコピーを Web サーバーに保存し、ページ内のそれらの画像への URL を提供する方がはるかに良いと思います。

ファイルのサイズまたは数に懸念がある場合は、バッチ ジョブを作成して、特定の日数または時間よりも古いファイルを一時イメージ キャッシュからパージすることができます。

于 2012-08-06T21:57:53.027 に答える
2

データをダウンロードするハンドラを作成できます。

サンプル.ashx


public void ProcessRequest (HttpContext context) 
{
  string id = context.Request["id"];
  if (!string.IsNullOrEmpty(id))
     {
       //read byte[] and other data from database based upon given ID
       byte []ar=//result from database
       string fileName=//filename 
       context.Response.ContentType = "Application/octet-stream";
       context.Response.AddHeader("Content-Length", ar.Length.ToString());
       context.Response.AddHeader("Content-Disposition", "attachment; filename=" +  fileName );
       context.Response.BinaryWrite(ar);
       context.Response.Flush();
       context.Response.End();
      }
}

ハイパーリンク経由でリクエストする

<a href="sample.ashx?id=101">Download .zip</a>
<a href='sample.ashx?id=<%#Eval("ID")%>'><%#Eval("Desc")%></a>
于 2012-08-07T02:59:38.270 に答える