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