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