一個加強的檔案上傳(VB.Net)
這個檔案上傳應該可以滿足一般的需要了,其中的新增到資料庫記錄,您可以按需要省略掉。
程式碼:upload.aspx
<%@ Page Language="VB"%>
<% @ Import Namespace=" System.IO " %>
<% @ Import Namespace=" System.DATA " %>
<%@ import Namespace="System.Data.SqlClient" %>
<SCRIPT LANGUAGE = "VB" RUNAT = "SERVER">
Dim lstrFileFolder as string
Dim lstrFileFolder_1 as string
Dim lstrFileNamePath as string
Dim lstrFileNamePath_1 as string
Sub UploadFile_Clicked ( Sender as Object, e as EventArgs )
Dim lstrFileName as string
'Dim lstrFileFolder as string
Dim CMDfilename as string '表單cmdfilename的值
CMDfilename = request("CMDfilename")
'''
'''
' 如果上傳目錄為空,就使用" upload "作為預設上傳目錄
' 獲得上傳到伺服器的目錄名稱
if dir.value <> "" then
lstrFileFolder_1 = dir.value & "/"
lstrFileFolder = trim((Server.MapPath(""))) & "/" & dir.value & "/"
else
lstrFileFolder_1 = "upload/"
lstrFileFolder = trim((Server.MapPath(""))) &"/upload/"
end if
' 獲得檔名稱
lstrFileName = loFile.PostedFile.FileName
' 注: loFile.PostedFile.FileName 返回的是
'通過檔案對話方塊選擇的檔名,這之中包含了檔案的目錄資訊
'只能上傳.xls檔案
if instr(Path.GetFileName ( lstrFileName ),".xls")=0 and instr(Path.GetFileName ( lstrFileName ),".Xls")=0 and instr(Path.GetFileName ( lstrFileName ),".XLS")=0 then
MessageNotXLS.InnerHtml = "只能上傳.xls檔案"
MessageNotXLS.Style("color") = "red"
exit sub
end if
if CMDfilename = "random" then
dim lstrFileName111 as string = Path.GetFileName ( lstrFileName ) '獲得原名
lstrFileName=now()
lstrFileName=replace(lstrFileName,"-","")
lstrFileName=replace(lstrFileName,":","")
lstrFileName=replace(lstrFileName," ","")
'lstrFileName=lstrFileName+"."
lstrFileName=lstrFileName & right(Path.GetFileName ( lstrFileName111 ),len(Path.GetFileName ( lstrFileName111 ))-(instr(Path.GetFileName ( lstrFileName111 ),"."))+1)
else
lstrFileName = Path.GetFileName ( lstrFileName )
end if
' 去掉目錄資訊,返回檔名稱
' 判斷上傳目錄是否存在,不存在就建立
If ( not Directory.Exists ( lstrFileFolder ) ) Then
Directory.CreateDirectory ( lstrFileFolder )
End If
'上傳檔案到伺服器
lstrFileNamePath = lstrFileFolder & lstrFileName
lstrFileNamePath_1 = lstrFileFolder_1 & lstrFileName
' 得到上傳目錄及檔名稱
loFile.PostedFile.SaveAs ( lstrFileNamePath )
' 獲得並顯示上傳檔案的屬性
FileName.Text = lstrFileName
' 獲得檔名稱
FileType.Text = loFile.PostedFile.ContentType
' 獲得檔案型別
FileLength.Text = cStr ( loFile.PostedFile.ContentLength )
' 獲得檔案長度
FileUploadForm.visible = false
AnswerMsg.visible = true
' 顯示上傳檔案屬性
AddToDB()
End sub
'新增記錄資訊到資料庫,可以不要這步。
sub AddToDB()
Dim MyConnection As SQLConnection = New SQLConnection (ConfigurationSettings.AppSettings("ConnStr"))
Dim InsertCmd As String = "insert into chaoqi (title,filepath) values (@title,@filepath)"
Dim MyCommand As SqlCommand = new SqlCommand(InsertCmd, MyConnection)
MyCommand.Parameters.Add(New SqlParameter("@title", SqlDbType.NVarChar, 50))
MyCommand.Parameters("@title").Value = title.value
MyCommand.Parameters.Add(New SqlParameter("@filepath", SqlDbType.NVarChar, 50))
MyCommand.Parameters("@filepath").Value = lstrFileNamePath_1
MyCommand.Connection.Open()
Try
MyCommand.ExecuteNonQuery()
Message.InnerHtml = "<b>已新增記錄</b><br>" & InsertCmd.ToString()
Catch Exp As SQLException
If Exp.Number = 2627
Message.InnerHtml = "錯誤:已存在具有相同主鍵的記錄"
Else
Message.InnerHtml = "錯誤:未能新增記錄,請確保正確填寫了欄位"
End If
Message.Style("color") = "red"
End Try
MyCommand.Connection.Close()
end sub
</SCRIPT>
<html>
<head>
<title>上傳檔案</title>
<link href="style/main.css" type="text/css" rel="stylesheet" />
</head>
<BODY>
<ASP:panel id = "FileUploadForm" visible = " true " runat = "server">
<form method = "post" enctype = "multipart/form-data" runat = "server">
<p>
</p>
<table style="BORDER-RIGHT: #999999 1px; BORDER-TOP: #999999 1px; BORDER-LEFT: #999999 1px; WIDTH: 100%; BORDER-BOTTOM: #999999 1px; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: white" bordercolor="#999999" cellspacing="0" cellpadding="3" rules="cols" border="1">
<tbody>
<tr>
<td bgcolor="#000084" colspan="2">
<font color="#ffffff"><b>超期記錄檔案上傳(Excel檔案)</b></font></td>
</tr>
<tr>
<td width="20%">
請輸入該檔案要顯示的名稱:</td>
<td>
<input id = "title" type = "text" runat = "server"></td>
</tr>
<tr>
<td width="20%" bgcolor="#cccccc">
請選擇上傳到伺服器的檔案:</td>
<td bgcolor="#cccccc"><input id = "loFile" type = "file" runat = "server"></td>
</tr>
<tr>
<td width="20%" bgcolor="#eeeeee">
匹配型別:</td>
<td bgcolor="#eeeeee">
隨機生成檔名(無重複):
<input type="radio" checked="checked" value="random" name="CMDfilename" id="CMDfilename" />
使用原名(若重複則覆蓋):
<input type="radio" value="NotRandom" name="CMDfilename" id="CMDfilename" />
</td>
</tr>
<tr>
<td bgcolor="#cccccc" colspan="2">
<div class="expandable" onclick="OnToggleTOCLevel1()" level2ID="compilerOutputDiv" style="FONT-WEIGHT: bold; CURSOR: hand; COLOR: navy; TEXT-DECORATION: underline">顯示高階選項:</div>
<div id="compilerOutputDiv" style="display: none;">
<br><table width=100% bgcolor="#ffffcc">
<tr>
<td>請輸入上傳到伺服器的目錄名稱:<input id = "dir" type = "text" runat = "server">【可以自定義上傳目錄,形式如:upload_1,將新建一個upload_1目錄,請確定您有上傳到此目錄的許可權。當前程式目錄:<font color=red><b><%response.write (trim((Server.MapPath(""))))%>/</b></font>】</td>
</td></tr></table></div>
</td>
</tr>
<tr>
<td bgcolor="#cccccc" colspan="2">
<input type = "submit" value = "開始上傳" OnServerClick="UploadFile_Clicked" runat ="server">
<span id="MessageNotXLS" EnableViewState="false" style="font: arial 11pt;" runat="server"/></td>
</tr>
</tbody>
</table>
</form>
</ASP:panel>
<ASP:panel id = "AnswerMsg" visible = " false " runat = "server">
<META HTTP-EQUIV=REFRESH CONTENT='5;URL=Admin_XLS_list.aspx'>
檔案上傳完成 <br>
成功上傳 <ASP:label id = "FileName" runat = "server" /> <br>
檔案大小 <ASP:label id = "FileLength" runat = "server" /> 位元組 <br> 檔案型別 <ASP:label id = "FileType" runat = "server" /> <br>
5秒之後自動返回....
<br>
<span id="Message" EnableViewState="false" style="font: arial 11pt;" runat="server"/>
</ASP:panel>
<script language="JavaScript">
function OnToggleTOCLevel1()
{
var elemSrc = window.event.srcElement;
var elemLevel2 = document.all(elemSrc.level2ID);
if (elemLevel2.style.display == 'none')
{
elemLevel2.style.display = '';
if (elemSrc.usesGlyph == '1')
elemSrc.innerHTML = '6';
}
else {
elemLevel2.style.display = 'none';
if (elemSrc.usesGlyph == '1')
elemSrc.innerHTML = '4';
}
}
</script>
</BODY>
</HTML>