2012年6月4日星期一

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 屬性會檢查檔案內容


TAG: