星期五, 10月 17, 2014

[C#] FileUpload 上傳檔案

FileUpload 控件練習,筆記重點為
  • 判斷是否為允許上傳的檔案附檔名
  • 限制檔案大小,限制為 2MB
  • 判斷 Server 上檔案名稱是否有重覆情況,有的話必須進行更名
using System.IO;

namespace UploadSample
{
    public partial class _default : System.Web.UI.Page
    {
        protected void btnUpload_Click(object sender, EventArgs e)
        {

            if (FU1.HasFile == false) return;

            // FU1.FileName 只有 "檔案名稱.附檔名",並沒有 Client 端的完整理路徑
            string filename = FU1.FileName;

            string extension = Path.GetExtension(filename).ToLowerInvariant();
            // 判斷是否為允許上傳的檔案附檔名
            List<string> allowedExtextsion = new List<string> { ".jpg", ".bmp" };
            if (allowedExtextsion.IndexOf(extension) == -1)
            {
                lblMessage.Text = "不允許該檔案上傳";
                return;
            }

            // 限制檔案大小,限制為 2MB
            int filesize = FU1.PostedFile.ContentLength;
            if (filesize > 2100000)
            {
                lblMessage.Text = "檔案大小上限為 2MB,該檔案無法上傳";
                return;
            }

            // 檢查 Server 上該資料夾是否存在,不存在就自動建立
            string serverDir = @"D:\FileUploadDemo";
            if (Directory.Exists(serverDir) == false) Directory.CreateDirectory(serverDir);

            // 判斷 Server 上檔案名稱是否有重覆情況,有的話必須進行更名
            // 使用 Path.Combine 來集合路徑的優點
            //  以前發生過儲存 Table 內的是 \\ServerName\Dir(最後面沒有 \ 符號),
            //  直接跟 FileName 來進行結合,會變成 \\ServerName\DirFileName 的情況,
            //  資料夾路徑的最後面有沒有 \ 符號變成還需要判斷,但用 Path.Combine 來結合的話,
            //  資料夾路徑沒有 \ 符號,會自動補上,有的話,就直接結合
            string serverFilePath = Path.Combine(serverDir, filename);
            string fileNameOnly = Path.GetFileNameWithoutExtension(filename);
            int fileCount = 1;
            while (File.Exists(serverFilePath))
            {
                // 重覆檔案的命名規則為 檔名_1、檔名_2 以此類推
                filename = string.Concat(fileNameOnly,"_",fileCount,extension);
                serverFilePath = Path.Combine(serverDir, filename);
                fileCount++;
            }

            // 把檔案傳入指定的 Server 內路徑
            try
            {
                FU1.SaveAs(serverFilePath);
                lblMessage.Text = "檔案上傳成功";
            }
            catch (Exception ex)
            {
                lblMessage.Text = ex.Message;
            }
        }
    }
}
  • 控件畫面:FileUpload + Buton + Label 三個控件而已 ~~
[C#] FileUpload 上傳檔案

1 則留言: