摘要:在客戶端檢查 Upload File Size 後才允許上傳檔案
首先聲明一下,這個 Solution 其實並沒有什麼太大的價值,因為我用了 ActiveX,而且在一般客戶端設定裡都會被禁止的,所以這個方法的實用性並不是很高。不過除了這個方式之外,到目前為止,已經沒有其它方法可以達成這個功能了。
這個方法要能夠正確執行,你必須先將網站加入客戶端瀏覽器的信任網路區域,並且把執行 ActiveX 的權限打開。看到這裡,你就應該可以理解這個 Solution 為什麼沒有太大的價值了吧!因為不會有網路參觀者願意這樣做的。唯有你自己在使用、或是寫給公司或特定人使用時,才有人願意這麼做。不過,若從事情的光明面來看,就算你只寫給自己用,但是你可以在檔案上傳之前就知道檔案是否過大,而不必等到檔案全部傳過去後才被刪除,所以並不是毫無用處的。
以下是程式列表:
.aspx -
<form id="form1" runat="server">
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<br />
<input id="Button2" runat="server" onclick="if (CheckFileSize()) return;" type="button" value="Upload (Client)" /><br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
.aspx.vb -
Imports System.IO
Const LimitSize As Integer = 1024
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim script As New StringBuilder
script.Append("<script language=""JavaScript"" type=""text/javascript"">" & vbNewLine)
script.Append("function CheckFileSize()" & vbNewLine)
script.Append("{" & vbNewLine)
script.Append("var activeX = new ActiveXObject(""Scripting.FileSystemObject"");" & vbNewLine)
script.Append("var doc = document.form1." & FileUpload1.ClientID() & ".value;" & vbNewLine)
script.Append("var fi = activeX.getFile(doc);" & vbNewLine)
script.Append("var fileSize = fi.size;" & vbNewLine)
script.Append("if (fileSize > " & LimitSize.ToString & ") {" & vbNewLine)
script.Append(" alert(""檔案大小 "" + fileSize + "" bytes, 超過容許上限!"");" & vbNewLine)
script.Append(" return true;" & vbNewLine)
script.Append(" }" & vbNewLine)
script.Append(" else {return false;}" & vbNewLine)
script.Append("}" & vbNewLine)
script.Append("</script>" & vbNewLine)
If Not Page.ClientScript.IsClientScriptBlockRegistered("checkFileSize") Then
Page.ClientScript.RegisterClientScriptBlock(GetType(String), "checkFileSize", script.ToString)
End If
End SubProtected Sub Button2_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.ServerClick
FileUpload1.SaveAs(Server.MapPath("~/Images"))
If FileUpload1.PostedFile.ContentLength > LimitSize Then
Label1.Text = "抱歉,你上傳的檔案太大,無法接受。"
File.Delete(Server.MapPath("~/Images/" & FileUpload1.FileName))
End If
End Sub