這是我開發過程中用涉及到的一個功能,現在備份下來。
首先是在web.confing中做限制上傳大小配置和超時的配置,httpruntime的節點下有executionTimeout,maxRequestLength兩個屬性。executionTimeout設置超時的時間值,默認的為90秒,如果超出這個時間,浏覽器就會受到一個超時錯誤的通知,可以自己設置但一般不要太長啦,maxRequestLength就是設置文件的大小的,一般默認為4MB,這個太小了,我在做的過程中就是一開始沒設置這個屬性,測試時候傳了個10MB的文件,把系統給搞死啦^_^,具體設置如下:
<httpRuntimeexecutionTimeout="90"maxRequestLength="20480"/>
接下來就是動態的創建,上傳文件的控件,我是用一個腳本創建的,當然也可以用其他的方法,這個我在網上找過,但感覺沒這個好就用這個啦,為了減輕服務器的壓力,在這做了下限制上傳文件的個數,最多不能超過5個。
var i=1
function addFile()
{
if (i<6)
{var str = '<BR> <input type="file" name="File" runat="server" />'
document.getElementById('MyFile').insertAdjacentHtml("beforeEnd",
str)
}
else
{
alert("您一次最多只能上傳5個附件!")
}
i++
}
最後就是後台的實現啦,先判斷下文件的大小,別超過限制的大小,然後判斷下文件的格式,然後用Directory的CreateDirectory()方法創建一個存放的文件夾,然後用一個for循環存就好了,具體實現如下:
#region My method of upload file
///<summary>
/// Upload file method of method
///</summary>
protected void UpLoadFile()
{
System.Web.HttpFileCollection files = System.Web.HttpContext>.Current.Request.Files;
StringBuilder strmsg = new StringBuilder("");
int ifile;
for (ifile = 0; ifile < files.Count; ifile++)
{
if (files[ifile].FileName.Length > 0)
{
System.Web.HttpPostedFile postedfile = files[ifile];
if (postedfile.ContentLength / 10240 > 10240)//單個文件不能大於k
{
strmsg.Append(Path.GetFileName(postedfile.FileName) + "---不能大於k<br>");
pt"> break;
}
string fex = Path.GetExtension(postedfile.FileName);
if (fex != ".jpg" && fex != ".JPG" && fex != ".gif" && fex != ".GIF" && fex != ".doc" && fex != ".xls" && fex != ".txt")
{
strmsg.Append(Path.GetFileName(postedfile.FileName) + "---文件格式不對,只能是jpg,gif,doc,xls或txt!<br>");
break;
}
}
}
if (strmsg.Length <= 0)//說明附件大小和格式都沒問題
{
//以下為創建附件目錄
string dirpath = Server.MapPath("上傳附件");
if (Directory.Exists(dirpath) == false)
{
Directory.CreateDirectory(dirpath);
}
for (int i = 0; i < files.Count; i++)
{
System.Web.HttpPostedFile myFile = files[i];
string FileName = "";
string FileExtention = "";
FileName = System.IO.Path.GetFileName(myFile.FileName);
if (FileName.Length > 0)//有文件才執行上傳操作再保存數據庫
{
FileExtention = System.IO.Path.GetExtension(myFile.FileName);//得到文件得後綴名
string ppath = dirpath + @"\" + FileName ;
myFile.SaveAs(ppath);
ticket.IntAttachment(TBTicketNumber.Text, FileName, ppath, tbAttachment.Text);//插入數據庫
}
}
lbMess.Text = "恭喜,工單創建成功!";
}
else
{
lbMess.Text = strmsg.ToString();
lbMess.Visible = true;
}
}
#endregion