Asp.net 2.0上传文件的用法与Asp.net 1.0的相同,只不过多了一个FileUpload的组件而已
在网页上拖拽一个FileUpload和一个Button 控件
private void Button1_Click(object sender, System.EventArgs e ) 就可以写上传代码了
上传到硬盘上
string path = Server.MapPath("File");
string fileName = "1.dat";
this.FileUpload1.PostedFile.SaveAs(path+@"/"+fileName);
上传的文件就被存储到 当前网页同级的File文件夹下,文件名为1.dat
SaveAs方法的传入参数必须是绝对的物理路径, 在这里我们通过Server.MapPath来把一个相对的File文件夹路径
转化为了一个绝对物理地址。另外我建议文件名不要取实际的上传文件名,最好自定义。而自定的方式就是用
日期+随机数+后缀名 来拼接文件名。这样可以避免上传文件重名,导致无意覆盖。
注意 this.FileUpload1.PostedFile中的PostedFile实际就是文件上传到服务器时候分配的一个临时内存空间
,该类型为HttpPostedFile,程序运行完毕后该内存自动释放。 实际上,不管你保不保存上传文件到硬盘上,只要
发生了网页交互(Post),该文件都已经上传到服务器内存,剩下的问题就是你是否保存它。
上传到数据库
把上传文件传到数据库,则需要相应数据库字段为Image字段,该字段可以存储二进制数据。
SqlCommand command = new SqlCommand();
command.Connection = DataBase.GetConn();
command.CommandText = "insert into tb(img) values(@img)";
SqlParameter par = command.Parameters .Add("@img",SqlDbType.Image);
int length = this.File1.PostedFile.ContentLength;
//文件保存到缓存
byte[] imageByte = new byte[length];
this.File1.PostedFile.InputStream.Read(imageByte,0,length);
par.Value = imageByte;
command.Connection.Open();
command.ExecuteNonQuery();command.Connection.Close();
取出存在数据库中的文件则刚刚相反,数据库字段的值-》byte数组-》流-》文件。
这个在后面的文章再进行讲解