基本原理是:采用ADO Stream对象的BinaryRead方法将FORM中的所有数据读出,从中截取出所需的文件数据,以二进制文件方式存盘。
下面是上传文件页面的一个例子:
<html>
<body>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Submit" VALUE="Upload"></TD>
</form>
</body>
</html>
扩展资料
几种文件上传技术的比较
1、基于HTTP协议
该方法需要编程者利用第三方软件,如DELPHI、VB等,在应用程序中先进行HTTP协议编程,然后将待上传文件内容按HTTP协议的格式打包,最后向WEB服务器发送上传的请求报文,从而实现文件的上传。
因为DELPHI和VB不能编写完整的WEB网络程序,只能编写WEB小应用程序,因此,该方法只用于功能受限的网络应用。
2、基于VB(或DELPHI等)开发的文件上传组件
该方法利用VB(或DELPHI等编程语言)开发ASP服务器组件,实现特定的文件上传服务。它首先利用ASP表单功能将文件(二进制格式)从用户端上传到服务器端,然后使用VB开发的组件,对二进制文件进行处理,成为可以正常读写的文件。
该方法要求编程者不仅掌握ASP语言,而且还能利用VB等第三方语言进行组件编程,增加了开发的难度。
3、基于数据库技术
该方法和上个方法有类似之处。不同的地方在于对上传的二进制文件的处理上。它使用数据库来保存二进制文件。无论是小型数据库还是大型数据库都提供了存储二进制数据的数据类型,只要以Append Chunk方式将数据存入相应的字段就可以了。
该方法虽然简单可行,但是因为每次上传的文件大小都是不一样的,因此,会对数据库的空间造成很大的浪费,降低了数据的访问速度;并且使得文件只能在数据库环境下进行访问,造成了很大的不便。
先说明一下:一、组件上传,在使用方法上,使用代码少,更安全,更容易控制,并且功能更强大,比如可以实现控制上传图片的尺寸,可以实现真实的上传进度条等,并且上传图片后可以进行对图片进行编辑等。但缺点是要求服务必需安装这个组件,如果是自己的服务器还好办,如果你是租用空间的话,那么最好放弃组件上传吧。
二、无组件上传,在使用上相对稍复杂一点,需要你到网上下载一个“ASP无组件上传类”(一般为一个.inc文件),不能对图片进行处理,只可以控制上传的文件类型,文件大小等,优点是对服务器无要求,租用的服务器空间绝大多数都可以使用。
综上所述,对于一般小站或企业网站,上传文件不多,文件不大,要求不高的都使用无组件上传。
目前较流行的 无组件上传类有:
化境ASP无组件上传类
风声ASP无组件上传类
艾恩ASP无组件上传类
等,你在百度里搜索以上关键字,找到官方网站,可以免费下载相关上传类,并且有详细用法说明,及例子。
点击上传按钮:protected void btnupload_Click(object sender, EventArgs e)
{
string file = uploadfile.SaveFile(uploadpic, upleixing,"uploadpic")
if (UpType.ToLower() == "one")
{
Response.Write("<script>parent.document.form1." + htmControl + ".value='" + file + "'</script>")
}
else
{
Response.Write("<script>if(parent.document.form1." + htmControl + ".value==''){parent.document.form1." + htmControl + ".value='" + file + "'}else{parent.document.form1." + htmControl + ".value+='|" + file + "'}</script>")
}
}
类
uploadfile.cs
using System
using System.Data
using System.Configuration
using System.Web
using System.Web.Security
using System.Web.UI
using System.Web.UI.WebControls
using System.Web.UI.WebControls.WebParts
using System.Web.UI.HtmlControls
using System.IO
/// <summary>
/// uploadfile 的摘要说明
/// </summary>
public class uploadfile
{
public uploadfile()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 判断文件路径是否存在;
/// 返回创建点日期文件夹路径
/// </summary>
/// <returns></returns>
public static string createFolder()
{
string rtpaht = ""
DateTime datenow = DateTime.Now
string year = datenow.Year.ToString()
string month = datenow.Month.ToString()
string date = datenow.Day.ToString()
if (Directory.Exists(HttpContext.Current.Server.MapPath("~/uploadpic/" + year + "/" + month + "/" + date + "")) == false)
{
Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/uploadpic/" + year + "/" + month + "/" + date + ""))
}
rtpaht = "" + year + "/" + month + "/" + date + ""
return rtpaht
}
/// <summary>
/// 保存文件,返回带日期文件夹的路径。
/// </summary>
/// <param name="file"></param>
/// <param name="type"></param>
/// <returns></returns>
public static string SaveFile(FileUpload file,string type)
{
return SaveFile(file, type, "uploadpic")
}
/// <summary>
/// 保存文件
/// </summary>
/// <param name="file"></param>
/// <param name="type"></param>
/// <param name="SaveFoder"></param>
/// <returns></returns>
public static string SaveFile(FileUpload file, string type,string SaveFoder)
{
if (type.IndexOf("asp") >= 0 || type.IndexOf("php") >= 0 || type.IndexOf("aspx") >= 0 || type.IndexOf("jsp") >= 0 || type.IndexOf("exe") >= 0)
{
HttpContext.Current.Response.End()
}
string filename = file.PostedFile.FileName
if (file.HasFile)
{
string savepath1 = createFolder()
string savepath = ""
if (SaveFoder == "")
{
savepath = HttpContext.Current.Server.MapPath("~/"+SaveFoder+"/" + savepath1)
if (Directory.Exists(savepath) == false)
{
Directory.CreateDirectory(savepath)
}
}
else
{
savepath = HttpContext.Current.Server.MapPath("~/" + SaveFoder + "/" + savepath1)
if (Directory.Exists(savepath) == false)
{
Directory.CreateDirectory(savepath)
}
}
string filename2 = DateTime.Now.ToString().Replace("-", "").Replace(":", "").Replace(" ", "") + "." + GetFileExtends(filename, type)
file.SaveAs(savepath + "/" + filename2)
return savepath1 + "/" + filename2
}
else
{
// HttpContext.Current.Response.Write(CommdClass.ResponseScript("请选择上传的文件!", "-1"))
return "nofile.jpg"
}
}
/// <summary>
///
/// </summary>
/// <param name="filename"></param>
/// <param name="filetype">文件类型(gif,jpg,bmp)</param>
/// <returns></returns>
public static string GetFileExtends(string filename,string filetype)
{
string ext = null
if (filename.IndexOf('.') >0)
{
string[] fs = filename.Split('.')
ext = fs[fs.Length - 1]
}
if (filetype.IndexOf(ext.ToLower()) <0)
{
HttpContext.Current.Response.Write(ext + "<br>" + filetype)
HttpContext.Current.Response.Write(CommdClass.ResponseScript("文件格式错误,只允许上传" + filetype + "格式文件。", "0"))
return""
}
return ext
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)