1. 程式人生 > >BS—檔案上傳+給圖片加水印

BS—檔案上傳+給圖片加水印

一、檔案上傳到功能

一個靜態的Html頁面:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <!--enctype="multipart/form-data":選擇該方式說明選擇的是檔案流,也就是檔案的本身,如果表單中不上傳檔案,就不在需要enctype-->
    <form method="post" action="ProcessFileUP.ashx" enctype="multipart/form-data">
        <input type="file" name="fileup" />
        <input type="text" name="txtName" />
        <input type="submit" value="上傳" />
    </form>
</body>
</html>

檔案上傳的具體方法:

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            //一次只能上傳一個檔案,
            //獲取上傳的檔案
            HttpPostedFile file = context.Request.Files[0];
            if (file.ContentLength>0)
            {
                //對上傳檔案的型別進行校驗,獲取上傳檔案的名稱、
                string fileName = Path.GetFileName(file.FileName);//獲取上傳檔案的名稱,包含副檔名
                string fileExt = Path.GetExtension(fileName);//獲取使用者上傳副檔名
                if (fileExt == ".jpg")
                {    //對上傳的檔案進行重新命名
                    string newfilename = Guid.NewGuid().ToString();
                    //將上傳的資料夾放在不同的目錄下面,今天的檔案放在今天的資料夾下面
                    string dir = "/ImageUpload/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
                    //建立資料夾
                    if (!Directory.Exists(context.Request.MapPath(dir)))
                    {
                        Directory.CreateDirectory(context.Request.MapPath(dir));                   
                    }
                    //檔案的完整路徑
                    string fullDir = dir + newfilename + fileExt;
                    file.SaveAs(context.Request.MapPath(fullDir));
                    //對檔案進行儲存
                    file.SaveAs(context.Request.MapPath("ImageUpload/" + fileName));
                    //展示上傳是的檔案圖片
                    context.Response.Write("<html><body><img src='" + fullDir + "'></body></html>");
                }
                else
                {
                    context.Response.Write("只能上傳圖片檔案");
                }
            }
            else
            {
                context.Response.Write("請選擇上傳檔案");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

 當然還有一個出錯的介面:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>   
    <script type="text/javascript">
      window.onload =function() {
          setTimeout(change,1000);
        }
        function change() {
            var time = document.getElementById("time").innerHTML;
            time = parseInt(time);
            time--;
            if (time < 1) {
                window.Location.href = "HanderUserInfo.ashx"
            }
            else {
                document.getElementById("time").innerHTML = time;
                setTimeout(change, 1000)
            }
        }     
    </script>
</head>
<body>
    伺服器忙!<span style="font-size:20px;color:red "id="time">5</span>秒鐘後自動跳轉<a href="HanderUserInfo.ashx">使用者列表</a>
</body>
</html>

效果展示:

 二、給圖片加水印(對檔案上傳的一個改造)

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web;

namespace WebFileUP
{
    /// <summary>
    /// ProcessFileUP 的摘要說明
    /// </summary>
    public class ProcessFileUP : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            //一次只能上傳一個檔案,
            //獲取上傳的檔案
            HttpPostedFile file = context.Request.Files[0];
            if (file.ContentLength>0)
            {
                //對上傳檔案的型別進行校驗,獲取上傳檔案的名稱、
                string fileName = Path.GetFileName(file.FileName);//獲取上傳檔案的名稱,包含副檔名
                string fileExt = Path.GetExtension(fileName);//獲取使用者上傳副檔名
                if (fileExt == ".jpg")
                {    //對上傳的檔案進行重新命名
                    string newfilename = Guid.NewGuid().ToString();
                    //將上傳的資料夾放在不同的目錄下面,今天的檔案放在今天的資料夾下面
                    string dir = "/ImageUpload/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
                    //建立資料夾
                    if (!Directory.Exists(context.Request.MapPath(dir)))
                    {
                        Directory.CreateDirectory(context.Request.MapPath(dir));                   
                    }
                    //檔案的完整路徑
                    string fullDir = dir + newfilename + fileExt;
                    file.SaveAs(context.Request.MapPath(fullDir));
                    //擴充套件:給圖片新增水印
                    //using(Image img = Image.FromStream(file.InputStream)    
                    using (Image img = Image.FromFile(context.Request.MapPath(fullDir)))
                    {
                        //第一步:建立一個畫布
                        using (Bitmap map = new Bitmap(img.Width,img.Height))//根據畫布的高度和寬度建立畫布
                        {
                            //建立一個畫筆
                            using (Graphics g = Graphics.FromImage(map))
                            {
                                //用畫筆在畫布上畫圖,左上角開始,將整個圖片畫到畫布上面
                                g.DrawImage(img, 0, 0, img.Width, img.Height);
                                g.DrawString("版權所有", new Font("黑體", 28, FontStyle.Bold), Brushes.Gray, new Point(map.Width - 200, map.Height - 150));
                                string waterImageName = "water_" + Guid.NewGuid().ToString();
                                map.Save(context.Request.MapPath("/ImageUpload/" +waterImageName+ ".jpg"),System.Drawing.Imaging.ImageFormat.Jpeg);
                                //展示上傳是的檔案圖片
                                context.Response.Write("<html><body><img src='/ImageUpload/" +waterImageName+".jpg'/></body></html>");
                            }
                        }
                    }                                                       
                }
                else
                {
                    context.Response.Write("只能上傳圖片檔案");
                }
            }
            else
            {
                context.Response.Redirect("Error.html");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

效果展示:

如果本篇部落格對您有所幫助,記得點贊哦!