データベースからファイルをbyte []形式で取得しています。Linqがデータベースから取得する前に、ダウンロードダイアログを表示してもらいたいです。それはC#とASP.NETです。ファイルをダウンロードする前にダウンロードダイアログを表示するにはどうすればよいですか?
さて、それはこのようなものだ:
- ユーザーは、ファイルを選択し、それをクリックしてください。
- コードではクリックしたファイルのIDを取得し、Linqを使用してダウンロードしています。
- 次に、Response.OutputStream.Write(content、0、 content.Length)でファイルを送信します。
- データベースユーザーからファイルをダウンロードする前に、 ダウンロードダイアログは表示されません。
ファイルをダウンロードする前にダウンロードダイアログを表示するにはどうすればよいですか?
コード:IDによる
取得ファイル:
public static byte[] getFile(Guid id)
{
var linqFile = from file in MyDB.Files
where file.IdPliku.Equals(id)
select new
{
Content = file.Content
};
return linqFile.ToList().FirstOrDefault().Content.ToArray();
}
保存ファイル:
public void SaveFile(Guid fileID, string filename, string mimeTypes)
{
try
{
byte[] content = FileService.getFile(fileID);
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = mimeTypes;
Response.AppendHeader("Accept-Ranges", "bytes");
Response.AppendHeader("Content-Range", string.Format("0-{0}/{1}", content.Length, content.Length));
Response.AppendHeader("Content-Length", content.Length.ToString());
Response.AppendHeader("Content-Encoding", "utf-8");
Response.AppendHeader("Content-Type", Response.ContentType);
Response.AppendHeader("Content-Disposition", "attachment; filename= " + HttpUtility.UrlEncode(filename));
Response.OutputStream.Write(content, 0, content.Length);
//Response.BinaryWrite(content);
Response.Flush();
}
finally
{
Response.Close();
}
}
あなたは私の希望です。
そして、ユーザーが「保存」をクリックしたとき(ファイルがダウンロードされていないため)に何が保存されるはずですか? – Mrchief
ダウンロードのビルドを開始する前に、ヘッダーを出力して本文を開始する必要があります。これは、その時点でまだコンテンツが構築されていないため、コンテンツ長ヘッダーがないことを意味します。 –
最初にファイルを選択したとき(「模擬ファイル」を介して)、実際のファイルがデータベースから読み込まれたときに2回目にダウンロードを受け入れるようにしますか?それ以外の場合は、彼が彼が要求していない何かを固定することができるので、それはセキュリティ上の脆弱性のように聞こえるので、2番目のダイアログを避ける方法を想像することはできません。 –