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();
正在阅读:
web应用中文件的存放方式08-14
七年级历史下册第一单元隋唐时期:繁荣与开放的时代第5课安史之乱与唐朝衰亡课堂限时测试答案不全新人教版12-07
3G--WCDMA室内覆盖指导3-验收指导(1.0)12-29
最新2015年时事政治试题及答案(1—10月31日)2015年11月精心整理05-06
梭罗10-07
《卤化反应》习题及参考答案04-23
古典诗词阅读:描写元宵节的古诗词四十首09-14
2016年学前儿童文学试卷及答案11-06
采购内勤2023年度个人工作总结03-22
财务会计参考答案05-24
- 粮油储藏基础知识
- 论文范文(包括统一封面和内容的格式)
- 经典解题方法
- 综合部后勤办公用品管理办法+领用表
- 学生宿舍突发事件应急预案
- 16秋浙大《生理学及病理生理学》在线作业
- 四分比丘尼戒本(诵戒专用)
- 浙江财经大学高财题库第一章习题
- 九大员岗位职责(项目经理、技术负责人、施工员、安全员、质检员、资料员、材料员、造价员、机管员)
- 旅游财务管理习题(学生版)
- 德阳外国语高二秋期入学考试题
- 投资学 精要版 第九版 第11章 期权市场
- 控制性详细规划城市设计认识
- bl03海运提单3国际贸易答案
- 2010-2011学年湖北省武汉市武珞路中学七年级(上)期中数学试卷
- VB程序填空改错设计题库全
- 教师心理健康案例分析 - 年轻班主任的心理困惑
- 民间借贷司法解释溯及力是否适用?
- 三联书店推荐的100本好书
- 《化工原理》(第三版)复习思考题及解答
- 存放
- 方式
- 文件
- 应用
- web