任何人都可以解释这段代码
if (e.CommandName == "download")
{
string filename = e.CommandArgument.ToString();
string path = MapPath("~/Docfiles/" + filename);
byte[] bts = System.IO.File.ReadAllBytes(path);
Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Content-Type", "Application/octet-stream");
Response.AddHeader("Content-Length", bts.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Response.BinaryWrite(bts);
Response.Flush();
Response.End();
}
什么是命令参数,mappath,以及它是什么 “Content-Type”,“Application / octet-stream” 还有
Response.AddHeader("Content-Length", bts.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Response.BinaryWrite(bts);
Response.Flush();
答案 0 :(得分:0)
如果命令是下载的,很可能是从网格按钮,然后获取文件的名称作为参数(这些是按钮控件上的属性),并将其发送到浏览器。这会提示用户下载文件。
答案 1 :(得分:0)
首先,我建议您使用MSDN documentation搜索有关您想要了解的对象和方法的更多信息。 MSDN是一个有用的网络,应该使用。
引用MSDN CommandArgument:“获取或设置传递给Command事件的可选参数以及关联的CommandName”。它用于获取传递给命令事件的参数。在这种情况下,它是文件名。
string filename = e.CommandArgument.ToString();
MapPath用于将指定路径映射到物理路径。使用它可以获得文件的真实路径。例如:“C:\ Docfiles \ Yourfile.pdf”
string path = MapPath("~/Docfiles/" + filename);
ReadAllBytes方法,打开文件,读取内容然后关闭文件。这会将此文件的内容作为字节数组返回。
byte[] bts = System.IO.File.ReadAllBytes(path);
Response对象用于从服务器向用户发送输出。
Response.Clear();
Response.ClearHeaders();
Response.AddHeader用于构建将发送回用户的响应标头。我们使用它来设置关于我们发送回客户端的数据的信息。 “Content-Type”属性用于指定您返回给用户的文件类型。
Response.AddHeader("Content-Type", "Application/octet-stream");
“Content-Length”属性用于向浏览器通知您要返回的文件的大小。
Response.AddHeader("Content-Length", bts.Length.ToString());
“Content-Disposition”用于通知将返回的文件的名称。例如“file1.doc” Response.AddHeader(“Content-Disposition”,“attachment; filename =”+ filename);
“BinaryWrite()”将您的文件(此时为字节数组格式)写入当前HTTP输出而不进行任何字符转换。
Response.BinaryWrite(bts);
Flush方法立即发送缓冲输出。
Response.Flush();
最后,导致服务器停止处理请求并返回当前结果。
Response.End();