web应用中文件的存放方式

更新时间:2023-08-14 20:25:02 阅读量: 人文社科 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

web应用中文件的存放方式解决方案

解决方案A: 将附件保存到数据库服务器上,用户访问任何一台Web服务器都是通过连接到数据库,

从数据库中读取数据并传输到用户客户端。

优点:可以避免文件系统的权限问题,文件全部放在数据库中,非常方便文件的查找、

管理和备份。

缺点:在数据库中保存和检索能力文件会给服务器端增加压力。如果数据的量过大,速

度上也存在弱势。

技术储备:①利用FileUpLoad控件的FileBytes属性来获取字节数组。

②数据表的设计

③将文件上传到数据库中

protected void btUp_Click(object sender, EventArgs e)

{

if (fileUp.HasFile)

{

string strCon = "server=.;database=test;uid=sa;pwd=";

SqlConnection sqlcon = new SqlConnection(strCon);

sqlcon.Open();

SqlCommand sqlcom = new SqlCommand();

sqlcom.Connection = sqlcon;

mandText = "insert

values(@FileName,@FileLength,@FileFiter,@FileBytes)";

sqlcom.Parameters.Add("@FileName",

SqlDbType.VarChar).Value = fileUp.FileName;

sqlcom.Parameters.Add("@FileLength",

SqlDbType.Int).Value = fileUp.FileBytes.Length;

sqlcom.Parameters.Add("@FileFiter",

SqlDbType.VarChar).Value = Path.GetExtension(fileUp.FileName);

sqlcom.Parameters.Add("@FileBytes",

SqlDbType.Image).Value = fileUp.FileBytes;

sqlcom.ExecuteNonQuery();

sqlcon.Close();

}

} ④上传大文件

中默认是不能提交大于4M的表单,超过这个值是会报异常,解决方法需要配

置web.config文件。 into [File]

<system.web>

<httpRuntime maxRequestLength="10240" requestLengthDiskThreshold="100"

executionTimeout="600" />

</system.web>

Ⅰ.maxRequestLength文件上传的最大字节数,以kb为单位。

Ⅱ.requestLengthDiskThreshold文件上传时缓存的大小。

Ⅲ.executionTimeout文件上传的最大上传时间以秒为单位。

⑤注意点

Ⅰ.System.IO.GetExtension()提取指定路径的扩展名。

Ⅱ.MapPath()获取指定虚拟路径对应的服务器路径。

Ⅲ.为了防止文件名相同,用当前时间作为文件名。

解决方案B

将文件保存在服务器的文件夹中。

优点:速度上有优势,文件上传、下载通过链接读取文件。

缺点:不便于文件的管理,比如将文件夹转移位置,或服务器硬盘满了,把文件放到其 他地方,就得更新文件的链接。当然也不利于文件资料的备份等,如果有多个WEB服务

器,当用户访问其一服务器,却得不到其他服务器文件夹的文件 。

原理:用SaveAs 方法把文件上传到指定的地方。

protected void btUp_Click(object sender, EventArgs e)

{

if (fileUp.HasFile)//判断是否有文件

{

Literal lt = new Literal();//定义一个Literal用来显示脚本

if (CheckFileType(fileUp.FileName))//检查上传文件的类型

{

string filePath = "~/file/" + fileUp.FileName;

fileUp.SaveAs(MapPath(filePath));//把文件上传到服务器的绝对路

径上

lt.Text = "<script>alert('文件上传成功!~')</script>";

}

else

{

lt.Text = "<script>alert('文件类型不正确!~')</script>";

}

this.Controls.Add(lt);

}

}

//用来获取文件类型

public bool CheckFileType(string fileName)

{

//获取文件的扩展名,前提要用这个方法必须引入命名空间io

string ext = Path.GetExtension(fileName);

switch (ext.ToLower())

{

case ".gif":

return true;

case ".png":

return true;

case ".jpeg":

return true;

case "jpg":

return true;

default:

return false;

}

}

注意事项:为了使文件能上传到服务器,页面关联的Window账户必须有足够的权限来保存文件,设置权限的方法,在要上传的目录中点击右键—选择安全----为NETWORK SERVICE或账户提供该文件夹的写权限。

把上传的文件显示到DATAlist中

string upPath = MapPath("~/file/");

DirectoryInfo dir = new DirectoryInfo(upPath);

DataList1.DataSource = dir.GetFiles();

DataList1.DataBind();

解决方案C

采用上传到数据库与服务器文件夹结合的方法。即先把文件放到服务器一个特定的文件夹中,然后再上传到数据库中,这样当用户读取某个文件时,若文件夹中有这个文件,则直接读取,而不用访问数据库。若文件夹中没有这个文件,则从数据库中读取,再放到这个文件夹中,这样,当用户第二次访问同样一个文件,就不需访问数据库,而直接从文件夹中读取。

优点:不仅有着文件夹方式的访问效率,而且也有数据库存放方式的便于管理等优势。 缺点:上传到数据库的话还是存在速度的上的弱势,也会造成数据冗余。

解决方案 D

针对方案B将文件上传到服务器文件夹,在多台Web服务器上开启文件同步的服务,用户上传了附件到一台服务器上,通过文件同步服务将所有新上传的附件同步其他所有Web服务器上,这样就会在每台服务器上保存一个附件的副本,访问其一服务器,能够获取其他服务器的文件,但是及其浪费空间,而且文件的同步还存在延时和失败的情况。

解决方案E

文件上传到服务器文件夹,用数据库来进行管理,把文件上传到服务器的同时,将此文件的名字,长度,存储的服务器名称,路径等信息保存到数据库。数据库保存的是路径,通过读取数据库里的路径地址查到要找的文件

优点:非常方便文件的查找、管理和备份。数据库的负担也不重,数据量过大时,存储速度也很快。如果换服务器时,只要在数据库里修改名称就可以。

缺点:备份和恢复数据的时候比较麻烦,同时还要解决好,删除数据库的文件记录,是否还要删除文件本身。文件读取的时候还要把相对地址转为绝对地址。

案例:

购物网站商品的信息数据库, 数据库一张表, 后台上传图片后,图片会保存在服务器的文件夹下,图片的路径保存在商品信息表中。 最后,图片在前台从数据库的路径读取服务器的图片显示出来。

技术储备:利用FileUpLoad控件

protected void Button1_Click(object sender, EventArgs e)

{

//判断上传格式是否符合

bool flag = false;

if (fileuploadPic.HasFile)

{

//获取当前文件的格式

string fileExtension = System.IO.Path.GetExtension(fileuploadPic.FileName).ToUpper();

//只允许上传格式

string[] allowExtension = { ".JPG", ".GIF", ".PNG", ".BMP", ".JPEG",".SWF" };

for (int i = 0; i < allowExtension.Length; i++)

{

if (fileExtension == allowExtension[i])

flag = true;

}

}

//如果符合上传模式

if (flag)

{

string name = fileuploadPic.FileName; //获取文件名

string newname = Session["photos1"].ToString() + "_" + name; //重命名文件名,以免跟文件夹现有的文件重名

string ipath = Server.MapPath("Photos") + "\\" + newname; //指定文件在服务器上的保存路径

DateTime date = System.DateTime.Now; //获取当前时间

fileuploadPic.SaveAs(ipath);//将选定在控件上的文件保存到服务器指定的目录

string sql = "insert into BookPhoto(Bookimage) values('" + ipath + "')"; //把文件在服务器上的路径保存到数据

// 调用数据库的类,添加到数据库中。

DB db = new DB();

SqlConnection cnn = db.ConnectionCnnString1;

int i = db.AddTable(sql);

//把执行结果强制转换为int型数据

if (i == 1)

{

Response.Write("<script language=javascript>alert('上传成功!')</script>");

}

else

{

Response.Write("<script language=javascript>alert('上传失败!')</script>");

}

}

else

{

Response.Write("<script language=javascript>alert('文件格式不正确,请检查...')</script>");

}

}

FileUpLoad控件:

如果要删除文件删除数据库中的信息,也要删除服务器文件下的对应的文件。可以用file类来实现删除,File.Delete();

本文来源:https://www.bwwdw.com/article/g7tj.html

Top