FileUpload 檔案上傳

用 FileUpload 來作上傳檔案的動作並且可過濾上傳檔案類別

用 FileUpload 來作上傳檔案的動作並且可過濾上傳檔案類別


	protected void FileUploadButton_Click(object sender, EventArgs e)
{
 
    Boolean FileOK = false;
    string FilePath = "D:\\upload\\"; //設定上傳的路徑
    //if (FileUploadField.HasFile)
    if(FileUploadField.FileName.Length > 0)
    {
        string fileExtension = System.IO.Path.GetExtension(FileUploadField.FileName).ToLower(); //如果副檔名有大寫則將他轉為小寫
        string[] allowExtensions = { ".zip", ".rar", ".7z", ".doc", ".docx" }; //允許的檔案類型
        for (int i = 0; i < allowExtensions.Length; i++)
        {
            if (fileExtension == allowExtensions[i])
            {
                FileOK = true;
            }
        }
    }
 
 
 
    if (FileOK)
    {
        try
        {
            string tmpFileName = FileUploadField.FileName;
            string Date = DateTime.Now.ToString("MM-dd-hh-mm");
            tmpFileName = Date + "_" + FileUploadField.FileName;
            FileUploadField.PostedFile.SaveAs(FilePath + tmpFileName);
            UploadedMessage.Text = "你所上傳的檔案為「" + FileUploadField.FileName + "」<br/>上傳成功";
        }
        catch (Exception ex)
        {
            UploadedMessage.Text = "上傳失敗";
        }
    }
    else
    {
        UploadedMessage.Text = "不允許此類型檔案的上傳";
    }
}

補充(感謝ricoisme的提醒)

我將允許檔案類型加上 .txt 來作測試


	string[] allowExtensions = { ".zip", ".rar", ".7z", ".doc", ".docx", ".txt" }; //允許的檔案類型

這時上傳一個沒有內容的 .txt 文件會使得 HasFile 的判斷為 false ,檔案則無法上傳成功

所以將


	if (FileUploadField.HasFile)

改為


	if(FileUploadField.FileName.Length > 0)

這樣就沒有問題囉!不過我想正式應用的時候要多寫判斷,就是如果檔案的 Length 等於零的話,就顯示不允許上傳無內容檔案,畢竟上傳無內容的檔案好像沒有什麼好處阿。

參考資料:

HOW TO:以 FileUpload Web 伺服器控制項上載檔案
[ASP.NET][Tips]FileUpload.HasFile 屬性會檢查檔案內容