BS—檔案上傳+給圖片加水印
阿新 • • 發佈:2019-01-10
一、檔案上傳到功能
一個靜態的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;
}
}
}
}
效果展示:
如果本篇部落格對您有所幫助,記得點贊哦!