1. 程式人生 > >【ASP】FileUpload上傳圖片並儲存資料庫

【ASP】FileUpload上傳圖片並儲存資料庫

介面簡單粗糙,將就將就,程式碼複製過去應該可以直接用
這裡寫圖片描述
前臺程式碼就這點:

<div class="Upload">
            <asp:FileUpload ID="FileUpload" runat="server" />
        </div>
        <asp:Button ID="btnSave" runat="server" Text="儲存" OnClick="btnSave_Click" />

接下來是後臺,首先確定明確一下我們的邏輯關係:簡單點說,觸發“儲存”的點選事件時,第一是把圖片放到伺服器的指定位置,第二是把圖片的位置(路徑)存入到資料庫中…`

上傳圖片的方法(“儲存”的點選事件時觸發時呼叫該方法)

//上傳圖片 返回是否儲存成功 儲存的路徑 縮圖路徑
        public bool Upload(ref string imgSavePath, ref string vimgSavePath)
        `這裡寫程式碼片`{
            //獲取上傳的檔名
            string fileName = this.FileUpload.FileName;
            fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + fileName;
            string route ="http://192.168.2.168:8006";//你的伺服器地址
            //如果伺服器不存在該名資料夾 就生成一個
            if (!Directory.Exists(route + "Images/"))
            {
                Directory.CreateDirectory(route + "Images/");
            }
            //獲取物理路徑(圖片儲存的位置)
            String path = Server.MapPath("~/Images/");
            //判斷上傳控制元件是否上傳檔案
            if (FileUpload.HasFile)
            {
                //判斷上傳檔案的副檔名是否為允許的副檔名".gif", ".png", ".jpeg", ".jpg" ,".bmp"
                String fileExtension = System.IO.Path.GetExtension(fileName).ToLower();
                String[] Extensions = { ".gif", ".png", ".jpeg", ".jpg", ".bmp" };
                for (int i = 0; i < Extensions.Length; i++)
                {
                    if (fileExtension == Extensions[i])
                    {
                        //進行上傳圖片操作
                        this.FileUpload.PostedFile.SaveAs(path + fileName);
                        imgSavePath = path + fileName;//原圖儲存路徑
                        vimgSavePath = path + "th_" + fileName;//縮圖儲存路徑
                        imgsize(imgSavePath, vimgSavePath);//生成縮圖
                        return true;
                    }
                }
            }
            return false;
        }

生成縮圖的方法(圖片上傳成功呼叫該方法)

public void imgsize(string imgSavePath, string vimgSavePath)
        {
            //本例中假定了兩個變數:

            String src = imgSavePath;//源影象檔案的絕對路徑
            String dest = vimgSavePath; //生成的縮圖影象檔案的絕對路徑

            int thumbWidth = 100;    //要生成的縮圖的寬度
            int thumbHeight = 100;   //要生成的縮圖的高度
            System.Drawing.Image image = System.Drawing.Image.FromFile(src); //利用Image物件裝載源影象

            //接著建立一個System.Drawing.Bitmap物件,並設定你希望的縮圖的寬度和高度。
            int srcWidth = image.Width;
            int srcHeight = image.Height;
            Bitmap bmp = new Bitmap(thumbWidth, thumbHeight);

            //從Bitmap建立一個System.Drawing.Graphics物件,用來繪製高質量的縮小圖。
            System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);

            //設定 System.Drawing.Graphics物件的SmoothingMode屬性為HighQuality
            gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            //下面這個也設成高質量
            gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            //下面這個設成High
            gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

            //把原始影象繪製成上面所設定寬高的縮小圖
            System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight);
            gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel);

            //儲存影象,大功告成!
            bmp.Save(dest);

            //最後別忘了釋放資源
            bmp.Dispose();
            image.Dispose();
        }

最後上“儲存”的觸發程式碼

//儲存上傳的圖片到資料庫
        protected void btnSave_Click(object sender, EventArgs e)
        {
            var imgSavePath = "";//儲存圖片路徑
            var vimgSavePath = "";//縮圖路徑
            var result = Upload(ref imgSavePath, ref vimgSavePath);
            if (result)
            {
                //圖片上傳完成  進行寫資料庫操作
                Response.Write("<script>alert('已儲存')</script>");
                this.labImg.Text = "原圖儲存路徑:" + imgSavePath;
                this.labVimg.Text = "縮圖儲存路徑:" + vimgSavePath;
            }
        }

存資料庫不用我說了吧
後記:不足之處請大家見諒,希望通過相互間交流來完善彼此這裡寫程式碼片