7.31 文件上传
文件上传:
1、将文件上传到指定路径
使用FileUpload控件,使用控件的SaveAs另存为方法,需
要绝对路径;
string path = "Uploads/aaa.txt";//文件的相对路径
string endPath = Server.MapPath(path);//将相对路径映射
成绝对路径
FileUpload1.SaveAs(endPath);
问题:
文件名重名,文件被覆盖
优化1:
string path = "Uploads/" + FileUpload1.FileName;//
文件的相对路径
可以保留用户选择的文件名称
问题:
许多人都上传文件,肯定会出现重名的情况,那
就被覆盖了
优化2:
//拼接上传时间,上传用户名,上传文件全称,防止并发
重名问题
string name = DateTime.Now.ToString
("yyyyMMddhhmmss") + Request.Cookies["user"].Value +
FileUpload1.FileName;
问题:
用户可能会上传超过默认大小的文件,那么程序就会崩溃
,最大限制为4MB大小
优化3:
扩容、在Web.config配置文件里面添加以下一句话
<system.web>
<compilation debug="false" targetFramework="4.0" />
<httpRuntime maxRequestLength="40960"/>//增加这一句
,单位是KB
</system.web>
注意:扩容不要扩的太大,因为是占内存空间的;
作业:去网上搜一下C#大文件上传,断点续传
优化4:
增加超大验证,有客户端验证和服务端验证两种方式;
C#服务端验证:
//检查是否有选中文件
if (FileUpload1.HasFile)
{
//如果有选中文件,那么验证文件大小是否超过4MB
if (FileUpload1.PostedFile.ContentLength > (4
* 1024 * 1024))
{
Label1.Text =
FileUpload1.PostedFile.ContentLength.ToString();
}
}
JS客户端验证:
<script type="text/javascript">
window.onload = function () {
document.getElementById('Button1').onclick =
function () {
var fl1 = document.getElementById
('FileUpload1');
//判断是否有选中的文件
if (fl1.value.length <= 0) {
alert('请选择要上传的文件!');
return false;
}
else {
//验证大小是否超过限制
if (fl1.files[0].size > (4 * 1024 *
1024)) {
alert('文件超过4MB!');
return false;
}
}
};
};
</script>
优化5:
限制用户能选择的文件类型:
限制普通人,控件属性:accept=".jpg,.jpeg,.png";
限制奇葩:
//看看你选择的文件是否符合我的要求
if (fl1.value.substr(fl1.value.length - 4)
!= '.jpg' && fl1.value.substr(fl1.value.length - 4) !=
'.png' && fl1.value.substr(fl1.value.length - 5) !=
'.jpeg')
{
alert(fl1.value.substr
(fl1.value.length - 4));
return false;
}
优生活网站,新增产品,需要上传产品图片,1、将图片
传到服务器上来,2、将图片路径保存进数据库
//-----------上传图片-------------
//1、验证
//2、将选中的文件上传到服务器指定文件夹上来
string path = "images/" + DateTime.Now.ToString
("yyyyMMddhhmmss") + FileUpload1.FileName;
FileUpload1.SaveAs(Server.MapPath(path));
//3、将图片路径存到数据库
c.img = path;
new chanpinData().Insert(c);