我以字节[]格式从数据库中获取文件,并希望用户在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
在开始构建下载之前,您必须输出标题并启动正文。这意味着没有内容长度标题,因为内容尚未在此时建立。 –
您希望用户接受下载两次,第一次选择文件时(通过“模拟文件”),第二次当真正的文件从数据库中加载时?我无法想象这是避免第二个对话的方法,因为否则你可以给他钉他没有要求的东西,这听起来像是一个安全漏洞。 –