在客戶端檢查 Upload File Size 後才允許上傳檔案

摘要:在客戶端檢查 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 Sub

    Protected 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


Dev 2Share @ 點部落