下载asp.net中的代码expalanation

时间:2014-02-21 18:30:46

标签: asp.net

任何人都可以解释这段代码

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();

2 个答案:

答案 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();