/*上传文件C#-1*/
file.PostedFile.SaveAs(Server.MapPath("/temp/") + file.PostedFile.FileName.Substring(file.PostedFile.FileName.LastIndexOf("\\")+1));
/*上传文件C#-2*/
using System;
using System.Data;
using System.Data.SqlClient;
using CA.Components; //全部在组件名称空间下
namespace CA.Components
{
/// <summary>
/// General 的摘要说明。
/// 发布日期:2002-8-8 原作者:雷神
/// 此程序属模式小组 HTTP://WWW.AI361.COM/PROJECT/
/// 在sql2000,WIN2000s+.net+iis5中测试通过
/// </summary>
public class General
{
private string FilePath; //文件路径
//定义一个枚举用来存放文件的信息
public enum File
{
FILE_SIZE , //大小
FILE_POSTNAME, //
FILE_SYSNAME ,
FILE_ORGINNAME,
FILE_PATH
};
//构造函数
public general()
{
//在WEB.CONFIG中设定AppSettings["filepath"],用于存放文件的路径。
FilePath = System.Configuration.ConfigurationSettings.AppSettings["filepath"];
}
/// <summary>
/// 上传文件通用函数,此方法为静态,系统任何时候均可调用。
/// </summary>
/// <param name="file">参数为页面的FILE控件对象</param>
/// <returns></returns>
public static string[] UploadFile(HtmlInputFile file)
{
string[] arr = new String[5];
//通过系统时间生成文件名,此功能可以封闭掉,不过中文长文件名支持的不好。
string FileName = DateTime.Now.ToString().Replace(" ","").Replace(":","").Replace("-","");
string FileOrginName = file.PostedFile.FileName.Substring(file.PostedFile.FileName.LastIndexOf("\\")+1);
if(file.PostedFile.ContentLength<=0)
return null;
string postFileName;
string path = new general().FilePath+"\\";
try
{
int pos = file.PostedFile.FileName.LastIndexOf(".")+1;
postFileName = file.PostedFile.FileName.Substring(pos,file.PostedFile.FileName.Length-pos);
file.PostedFile.SaveAs(path+FileName+"."+postFileName);
}
catch(Exception exec)
{
throw(exec);
}
double unit = 1024;
double size = Math.Round(file.PostedFile.ContentLength/unit,2);
arr[(int)File.FILE_SIZE] = size.ToString();//文件大小
arr[(int)File.FILE_POSTNAME] = postFileName;//文件类型(文件后缀名)
arr[(int)File.FILE_SYSNAME] = FileName;//文件系统名
arr[(int)File.FILE_ORGINNAME] = FileOrginName;//文件原来的名字
arr[(int)File.FILE_PATH]=path+FileName+"."+postFileName;//文件路径
return arr;
//throw(new Exception(HtmlUtility.HtmlEncode(IDNO.PostedFile.FileName)));
}
}
}
/*上传文件VB.net-2*/
<%@ Import Namespace="System.IO" %>
<html>
<script language="VB" runat=server>
Sub UploadBtn_Click(Sender as Object, E as EventArgs)
TRY
UploadFile.PostedFile.SaveAs(Server.MapPath(Path.GetFileName(UploadFile.PostedFile.FileName)))
CATCH
END TRY
End Sub
</script>
<body>
<form enctype="multipart/form-data" runat=server>
<h3>
Select File To Upload: <input id="UploadFile" type=file runat=server>
<asp:button Text="Upload Me!" OnClick="UploadBtn_Click" runat=server/>
</form>
</body>
</html>
/*上传文件VB.net-1*/
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web.HttpPostedFile" %>
<%@ Import Namespace="System.Web.UI.HtmlControls.HtmlInputFile" %>
<script language="VB" runat="server">
Sub UpLoad(Src As Object, E As EventArgs)
If UploadFile.PostedFile.ContentLength=0 then
ShowUpLoadFile.innerText="上传失败或文件不存在!"
Else
'获取文件名
dim Temp() as String=Split(UploadFile.PostedFile.FileName,"\")
dim FileName as String=Temp(Temp.Length-1)
'保存文件
UploadFile.PostedFile.SaveAs(Server.MapPath(".") & "\Files\" & FileName)
'显示上传结果
ShowUpLoadFile.InnerHtml="文件上传成功!<br>上传文件名:" & FileName
End If
End Sub
</script>
<html>
<body>
<form runat="server" enctype="multipart/form-data">
<input type="file" id="UploadFile" runat="server" size="50"><br>
<asp:button runat="server" Text="立即上传" onClick="Upload" />
</form>
<hr><br>
<span id="ShowUpLoadFile" runat="server"></span>
</body>
</html>
把上面的代码保存成.aspx文件,然后在该文件所在目录下创建一个存放文件的新目录Files,运行,先感受一下效果,然后再继续看下面的讲解
使用ASP.NET上传文件,需要用到.NET框架的两个类:HttpPostedFile和HtmlInputFile,这两个类所在的命名空间分别是System.Web.HttpPostedFile和System.Web.UI.HtmlControls.HtmlInputFile,所以我们要在文件开头先导入这两个命名空间,
其中的PostedFile表示上传到服务器的文件,它包含几个常用的属性:
ContentLength:文件大小;
FileName :上传文件的详细路径及文件名;
ContentType :上传文件的文件类型。
字符分割函数Split是用来取得文件名的,因为通过PostedFile.FileName获得的是详细的路径及文件名。
多文件上传
所谓的多文件上传就是同时上传多个文件,这个跟单一文件上传大多是相同的,不同的是多文件上传是把所有文件作为一个文件集合一起上传到服务器的,我们需要的是把这个文件集合分解成一个个单一的文件,剩下的处理方法就跟单一文件上传一样了。
首先你要知道要最多同时上传多少个文件,然后你就在form之间放多少个如下的HtmlInput控件:
<input type="file" runat="server" size="50">
注意:这里的HtmlInput控件控件是不需要设置ID的
那怎么在上传到服务器的文件集合中取出一个个的文件呢?看下面的代码:
dim i as integer
For i=0 to Request.Files.Count-1
‘使用Request.Files()来逐个获取上传的文件
dim myFile as HttpPostedFile=Request.Files(i)
'这里的myFile就相当于上例中的PostedFile,可以用myFile.FileName获得文件名,etc
'这里的处理代码就跟单一文件上传的一样了
Next
现在你已经掌握了ASP.NET文件上传技术了,只要灵活应用,美化上传界面,做出好的ASP.NET上传程序了也不是什么难事了。