注意事项:
1>表单的提交方式必须为post,method="post";//由于http上面的数据大小有限,所以不支持使用get显示到上面。
2>必须修改表中提交数据时的数据组织方式
enctype="application/x-www-form-urlencoded"//默认方式 数据是以键值对的方式组织提交的
enctype="multipart/form-data"//需要改为这种方式 这种方式是以为分隔符的方式来进行提交的。
3>表单中需要有一个文件域。及<input type="file" name="fileData"/>
--->
客户端-html文件代码:
<form action="Uploadashx.ashx" method="post" enctype="multipart/form-data">
<input type="file" name="fileData" /><br />
<input type="submit" value="提交"/>
</form>
服务器--一般处理程序代码:
//服务器处理上传过来的文件
//首先判断文件域是否有文件
if (context.Request.Files.Count > 0)
{
//获得第一个文件
HttpPostedFile file = context.Request.Files[0];
//判断里面的内容是否为null
if (file.ContentLength > 0)
{
//将上传过来的内容保存到一个文件夹
string str1 = Path.GetFileName(file.FileName);
file.SaveAs(context.Request.MapPath("Files/"+str1));
//根据相对路径获取绝对路径,并追加文件名开始保存
}
}
<<--
上传文件需要注意的问题:
1.【解决文件重名问题
可以通过Guid生成一个序列号(没重复的),然后+文件名拼接成一个新的文件名,然后保存,这样就可以避免重名发生覆盖现象。
string new_FIleName = Guid.NewGuid().ToString() + "_" + file.FileName;
2.【解决文件过多存储问题
可以通过目录分离算法来保证将不同的图片保存在不同的目录下。
--------------------------------------------------------<<
string new_FIleName = Guid.NewGuid().ToString() + "_" + file.FileName;
//获得哈希码
int hash_Code = new_FIleName.GetHashCode();
//获得第一层目录
int dir1 = hash_Code & 0xf;
hash_Code = hash_Code >> 4;//向右移动四位得到第二层目录
int dir2 = hash_Code & 0xf;
hash_Code = hash_Code >> 4;//再向右移动四位得到第三层目录
int dir3 = hash_Code & 0xf;
//拼接路径
string strPath = Path.Combine(context.Request.MapPath("filePath/"),dir1.ToString(),dir2.ToString(),dir3.ToString());
//判断路径是否存在
if (!Directory.Exists(strPath))
{
//如果不存在则创建文件
Directory.CreateDirectory(strPath);
}
//拼接路径+文件名
strPath = Path.Combine(strPath, new_FIleName);
//开始保存
file.SaveAs(strPath);
context.Response.Write("上传成功~");
3.【不允许用户上传exe文件,所以要先判断用户上传的内容是否合法
-->>在服务器进行校验
string ext=Path.GetExtension(file.FileName);//首先获得扩展名 if((ext==".jpg"||ext==".png"||ext==".gif")&&file.ContentType.ToLower().StartsWith("image"))
{
context.Response.Write("文件上传成功~");
}else{
context.Response.Write("非法的文件!");
}
-->>在客户端用js进行校验
//在客户端校验用户上传的文件是否合法
document.getElementById("btnClick").onclick = function () {
//1.获取用户选择文件的名称
var getFile = document.getElementById("fileData").value();
//2.获取后缀
var ext = getFile.substring(getFile.lastIndexOf('.'));
//3.校验
if(ext==".jpg"||ext==".png"||ext==".gif")&&file.ContentType.ToLower().StartsWith("image"))
{
return true;
}else{
return false;
}
};