主题:提供文件下载方法
文件下载方法
方法一
private void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(FullFileName);
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
Response.WriteFile(DownloadFile.FullName);
Response.Flush();
Response.End();
}
之后在按钮处,引用该该函数。如: FileDownload(Server.MapPath("." + "/file/博客需求分析.rar"));
方法二
按钮下代码:
System.IO.FileStream r = new System.IO.FileStream(Server.MapPath("." + "/file/博客需求分析.rar"), System.IO.FileMode.Open);
// 设置基本信息
Response.Buffer = false;
Response.AddHeader("Connection", "Keep-Alive");
Response.ContentType = "application/octet-stream";
// Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + Server.UrlEncode(fileName) + "\"");
// Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName("博客需求分析.rar"));
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + Server.UrlEncode("博客需求分析.rar") + "\"");
Response.AddHeader("Content-Length", r.Length.ToString());
while (true)
{
//开辟缓冲区空间
byte[] buffer = new byte[1024];
//读取文件的数据
int leng = r.Read(buffer, 0, 1024);
if (leng == 0)//到文件尾,结束
break;
if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
Response.BinaryWrite(buffer);
else
{
// 读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
byte[] b = new byte[leng];
for (int i = 0; i < leng; i++)
b[i] = buffer[i];
Response.BinaryWrite(b);
}
}
r.Close();//关闭下载文件
Response.End();//结束文件下载
===============================================
在ASP.NET 2.0中,提供了更方便的配置文件访问的类,具体可以到 System.Configuration 名称空间下进行查看。本文提供一种在开发过程中常用的得到数据库字符串的方法,为方便使用,写成一个方法进行调用:
public string GetConnectionString( string _connectionStringsName )
{
System.Configuration.ConnectionStringSettingsCollection config = System.Configuration.ConfigurationManager.ConnectionStrings;
for (int i = 0 ; i < config.Count ; i++)
{
if (config[i].Name.Equals(_connectionStringsName, StringComparison.OrdinalIgnoreCase))
return config[i].ToString();
}
return String.Empty;
}
如果web.config配置如下:
<connectionStrings>
<add name="ConnectionString1" connectionString="Persist Security Info=False;User ID=sa;Password=;Initial Catalog=DataBase1;Server=(local);" providerName="System.Data.SqlClient"/>
<add name="ConnectionString2" connectionString="Persist Security Info=False;User ID=sa;Password=;Initial Catalog=DataBase2;Server=(local);" providerName="System.Data.SqlClient"/>
</connectionStrings>
如果写成静态类方法,则可以使用下面的方法进行调用:
string ConnectString = XianhuiMengUtil.GetConnectionString("ConnectionString1");
另外,如果在遍历时进行输出,则可以看到多出来一个配置项,那是因为machine.config里已经默认定义理一个数据库连接,内容如下:
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
这就是许多网友在论坛上经常会问:为什么我的程序会调用 SQLEXPRESS 数据库的原因,如果你的数据库配置不正确,或者无法打开时,就会使用 SQLEXPRESS 数据库。
上传文件:
string fullfilename = this.File1.PostedFile.FileName;
string filename = fullfilename.Substring(fullfilename.LastIndexOf("\\")+1);
string type = fullfilename.Substring(fullfilename.LastIndexOf(".")+1);
if(type=="jpg"||type=="bmp"||type=="gif")
{
filename =GetRandomNum(4,1,9999).ToString()+"."+type;
this.File1.PostedFile.SaveAs(Server.MapPath("photos")+"\\"+filename);
}
else
{
Response.Write("<script>window.alert('图片格式不对!')</script>");
}
classes.PictureInfo info = new oblog.classes.PictureInfo();
info.YongHuID = id;
info.PictureName = TextBox1.Text;
info.Bak = "";
info.PicturePath = "/oblog/photos/" + filename;
info.PictureTypeID = DropDownList1.SelectedValue.ToString();
if(pp.AddPicture(info))
{
yonghucontrolsBind();
Response.Write("<script>window.alert('上传成功!')</script>");
}
else
{
Response.Write("<script>window.alert('上传失败!')</script>");
}
Response.Redirect("tupianmags.aspx?id="+id);
// string radom = GetRandomNum(4,1,9999).ToString();
//取得上传文件的各种属性。
fname.Text=myFile.PostedFile.FileName;
fenc.Text=myFile.PostedFile.ContentType ;
fsize.Text=myFile.PostedFile.ContentLength.ToString();
======================================================================
//检查上传文件不为空
if(File1.PostedFile!=null)
{
string nam = File1.PostedFile.FileName ;
//取得文件名(抱括路径)里最后一个"."的索引
int i= nam.LastIndexOf(".");
//取得文件扩展名
string newext =nam.Substring(i);
//这里我自动根据日期和文件大小不同为文件命名,确保文件名不重复
DateTime now = DateTime.Now;
string newname=now.DayOfYear.ToString()+File1.PostedFile.ContentLength.ToString();
//保存文件到你所要的目录,这里是IIS根目录下的upload目录.你可以改变.
//注意: 我这里用Server.MapPath()取当前文件的绝对目录.在asp.net里""必须用""代替
File1.PostedFile.SaveAs(Server.MapPath("upload"+newname+newext));
this.HyperLink1.NavigateUrl ="upload"+newname+newext;
//得到这个文件的相关属性:文件名,文件类型,文件大小
//fname.Text=File1.PostedFile.FileName;
//fenc.Text=File1.PostedFile.ContentType ;
//fsize.Text=File1.PostedFile.ContentLength.ToString();
}
方法一
private void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(FullFileName);
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
Response.WriteFile(DownloadFile.FullName);
Response.Flush();
Response.End();
}
之后在按钮处,引用该该函数。如: FileDownload(Server.MapPath("." + "/file/博客需求分析.rar"));
方法二
按钮下代码:
System.IO.FileStream r = new System.IO.FileStream(Server.MapPath("." + "/file/博客需求分析.rar"), System.IO.FileMode.Open);
// 设置基本信息
Response.Buffer = false;
Response.AddHeader("Connection", "Keep-Alive");
Response.ContentType = "application/octet-stream";
// Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + Server.UrlEncode(fileName) + "\"");
// Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName("博客需求分析.rar"));
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + Server.UrlEncode("博客需求分析.rar") + "\"");
Response.AddHeader("Content-Length", r.Length.ToString());
while (true)
{
//开辟缓冲区空间
byte[] buffer = new byte[1024];
//读取文件的数据
int leng = r.Read(buffer, 0, 1024);
if (leng == 0)//到文件尾,结束
break;
if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
Response.BinaryWrite(buffer);
else
{
// 读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
byte[] b = new byte[leng];
for (int i = 0; i < leng; i++)
b[i] = buffer[i];
Response.BinaryWrite(b);
}
}
r.Close();//关闭下载文件
Response.End();//结束文件下载
===============================================
在ASP.NET 2.0中,提供了更方便的配置文件访问的类,具体可以到 System.Configuration 名称空间下进行查看。本文提供一种在开发过程中常用的得到数据库字符串的方法,为方便使用,写成一个方法进行调用:
public string GetConnectionString( string _connectionStringsName )
{
System.Configuration.ConnectionStringSettingsCollection config = System.Configuration.ConfigurationManager.ConnectionStrings;
for (int i = 0 ; i < config.Count ; i++)
{
if (config[i].Name.Equals(_connectionStringsName, StringComparison.OrdinalIgnoreCase))
return config[i].ToString();
}
return String.Empty;
}
如果web.config配置如下:
<connectionStrings>
<add name="ConnectionString1" connectionString="Persist Security Info=False;User ID=sa;Password=;Initial Catalog=DataBase1;Server=(local);" providerName="System.Data.SqlClient"/>
<add name="ConnectionString2" connectionString="Persist Security Info=False;User ID=sa;Password=;Initial Catalog=DataBase2;Server=(local);" providerName="System.Data.SqlClient"/>
</connectionStrings>
如果写成静态类方法,则可以使用下面的方法进行调用:
string ConnectString = XianhuiMengUtil.GetConnectionString("ConnectionString1");
另外,如果在遍历时进行输出,则可以看到多出来一个配置项,那是因为machine.config里已经默认定义理一个数据库连接,内容如下:
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
这就是许多网友在论坛上经常会问:为什么我的程序会调用 SQLEXPRESS 数据库的原因,如果你的数据库配置不正确,或者无法打开时,就会使用 SQLEXPRESS 数据库。
上传文件:
string fullfilename = this.File1.PostedFile.FileName;
string filename = fullfilename.Substring(fullfilename.LastIndexOf("\\")+1);
string type = fullfilename.Substring(fullfilename.LastIndexOf(".")+1);
if(type=="jpg"||type=="bmp"||type=="gif")
{
filename =GetRandomNum(4,1,9999).ToString()+"."+type;
this.File1.PostedFile.SaveAs(Server.MapPath("photos")+"\\"+filename);
}
else
{
Response.Write("<script>window.alert('图片格式不对!')</script>");
}
classes.PictureInfo info = new oblog.classes.PictureInfo();
info.YongHuID = id;
info.PictureName = TextBox1.Text;
info.Bak = "";
info.PicturePath = "/oblog/photos/" + filename;
info.PictureTypeID = DropDownList1.SelectedValue.ToString();
if(pp.AddPicture(info))
{
yonghucontrolsBind();
Response.Write("<script>window.alert('上传成功!')</script>");
}
else
{
Response.Write("<script>window.alert('上传失败!')</script>");
}
Response.Redirect("tupianmags.aspx?id="+id);
// string radom = GetRandomNum(4,1,9999).ToString();
//取得上传文件的各种属性。
fname.Text=myFile.PostedFile.FileName;
fenc.Text=myFile.PostedFile.ContentType ;
fsize.Text=myFile.PostedFile.ContentLength.ToString();
======================================================================
//检查上传文件不为空
if(File1.PostedFile!=null)
{
string nam = File1.PostedFile.FileName ;
//取得文件名(抱括路径)里最后一个"."的索引
int i= nam.LastIndexOf(".");
//取得文件扩展名
string newext =nam.Substring(i);
//这里我自动根据日期和文件大小不同为文件命名,确保文件名不重复
DateTime now = DateTime.Now;
string newname=now.DayOfYear.ToString()+File1.PostedFile.ContentLength.ToString();
//保存文件到你所要的目录,这里是IIS根目录下的upload目录.你可以改变.
//注意: 我这里用Server.MapPath()取当前文件的绝对目录.在asp.net里""必须用""代替
File1.PostedFile.SaveAs(Server.MapPath("upload"+newname+newext));
this.HyperLink1.NavigateUrl ="upload"+newname+newext;
//得到这个文件的相关属性:文件名,文件类型,文件大小
//fname.Text=File1.PostedFile.FileName;
//fenc.Text=File1.PostedFile.ContentType ;
//fsize.Text=File1.PostedFile.ContentLength.ToString();
}