一般处理程序由于没有 apsx 页面的整个模型和控件的创建周期,而比较有效率。这里写一个用 html 表单进行文件上传的示例。
1. 表单元素选用 <input type="file"> 控件。
2. form 表单需要设置 enctype="multipart/form-data" 属性,请求报文体中数据格式也由键值对更改为数据头和数具体,并有随机边界符分割。
3. 服务器端接收文件使用 Request.Files 属性。
4. 使用 HttpPostedFile 的 SaveAs 方法保存文件(需转换成网站物理路径)。
<body>
<form action="UploadFile.ashx" method="post" enctype="multipart/form-data">
<input type="file" name="fileUpload" />
<input type="submit" value="上传文件" />
</form>
</body>
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
HttpServerUtility server = context.Server;
HttpRequest request = context.Request;
HttpResponse response = context.Response;
HttpPostedFile file = context.Request.Files[0];
if (file.ContentLength > 0)
{
string extName = Path.GetExtension(file.FileName);
string fileName = Guid.NewGuid().ToString();
string fullName = fileName + extName;
string imageFilter = ".jpg|.png|.gif|.ico";// 随便模拟几个图片类型
if (imageFilter.Contains(extName.ToLower()))
{
string phyFilePath = server.MapPath("~/Upload/Image/") + fullName;
file.SaveAs(phyFilePath);
response.Write("上传成功!文件名:" + fullName + "<br />");
response.Write(string.Format("<img src='Upload/Image/{0}'/>", fullName));
}
}
}