网站首页 > 网络编程教程 > ASP.NET教程 > 在ASP.NET中上传图片并生成缩略图的C#源码

在ASP.NET中上传图片并生成缩略图的C#源码

  • 作者:互联网
  • 时间:2009-06-30 15:30:13

在ASP.NET中上传图片并生成缩略图的C#源码 using System;
using Sy***m.Collections;
using Sy***m.ComponentModel;
using Sy***m.Data;
using Sy***m.Drawing;
using Sy***m.Web;
using Sy***m.Web.SessionState;
using Sy***m.Web.UI;
using Sy***m.Web.UI.WebControls;
using Sy***m.Web.UI.HtmlControls;
using Sy***m.IO;
using Sy***m.Drawing.Imaging;

namespace eM***.Exam
{
///


/// Thumbnail 的摘要说明。
///

public class Thumbnail : Sy***m.Web.UI.Page
{
protected Sy***m.Web.UI.WebControls.Label Label1;
protected Sy***m.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, Sy***m.EventArgs e)
{
// 在此处放置用户代码以初始化页面
La***1.Text = "

在ASP.NET里轻松实炙趼酝?lt;/h3>";
Bu***n1.Text = "上载并显示缩略图";

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
ba***OnInit(e);
}

///


/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///

private void InitializeComponent()
{
th***Button1.Click += new Sy***m.EventHandler(th***Button1_Click);
th***Load += new Sy***m.EventHandler(th***Page_Load);

}
#endregion

private void Button1_Click(object sender, Sy***m.EventArgs e)
{
HttpFileCollection MyFileColl = Ht***ontext.Current.Re***st.Files;
HttpPostedFile MyPostedFile = MyFileColl[0];

if (My***tedFile.ContentType.ToString().ToLower().IndexOf("image") < 0)
{
Re***nse.Write("无效的图形格式。");
return;
}
GetThumbNail(My***tedFile.FileName, 100, 100,
My***tedFile.ContentType.ToString(), false, My***tedFile.InputStream);
}
private Sy***m.Drawing.Imaging.ImageFormat GetImageType(object strContentType)
{
if ((st***ntentType.ToString().ToLower()) == "image/pjpeg")
{
return Sy***m.Drawing.Imaging.ImageFormat.Jpeg;
}
else if ((st***ntentType.ToString().ToLower()) == "image/gif")
{
return Sy***m.Drawing.Imaging.ImageFormat.Gif;
}
else if ((st***ntentType.ToString().ToLower()) == "image/bmp")
{
return Sy***m.Drawing.Imaging.ImageFormat.Bmp;
}
else if ((st***ntentType.ToString().ToLower()) == "image/tiff")
{
return Sy***m.Drawing.Imaging.ImageFormat.Tiff;
}
else if ((st***ntentType.ToString().ToLower()) == "image/x-icon")
{
return Sy***m.Drawing.Imaging.ImageFormat.Icon;
}
else if ((st***ntentType.ToString().ToLower()) == "image/x-png")
{
return Sy***m.Drawing.Imaging.ImageFormat.Png;
}
else if ((st***ntentType.ToString().ToLower()) == "image/x-emf")
{
return Sy***m.Drawing.Imaging.ImageFormat.Emf;
}
else if ((st***ntentType.ToString().ToLower()) == "image/x-exif")
{
return Sy***m.Drawing.Imaging.ImageFormat.Exif;
}
else if ((st***ntentType.ToString().ToLower()) == "image/x-wmf")
{
return Sy***m.Drawing.Imaging.ImageFormat.Wmf;
}
else
{
return Sy***m.Drawing.Imaging.ImageFormat.MemoryBmp;
}
}

private void GetThumbNail(string strFileName, int iWidth, int iheight,
string strContentType, bool blnGetFromFile, Sy***m.IO.Stream ImgStream)
{
Sy***m.Drawing.Image oImg;

if (blnGetFromFile)
{
oImg = Sy***m.Drawing.Image.FromFile(strFileName);
}
else
{
oImg = Sy***m.Drawing.Image.FromStream(ImgStream);
}
oImg = oI***GetThumbnailImage(iWidth, iheight, null, In***r.Zero);
string strGuid = Sy***m.Guid.NewGuid().ToString().ToUpper();
string strFileExt = st***leName.Substring(st***leName.LastIndexOf("."));
Re***nse.ContentType = strContentType;
MemoryStream MemStream = new MemoryStream();
oI***Save(MemStream, GetImageType(strContentType));
Me***ream.WriteTo(Re***nse.OutputStream);
}

}
}
功能:
1。把图片文件(JPG GIF PNG)上传,
2。保存到指定的路径(在we***onfig中设置路径,以文件的原有格式保存),
3。并自动生成指定宽度的(在we***onfig中设置宽度)
4。和指定格式的(在we***onfig中指定缩略图的格式)
5。和原图比例相同的缩略图(根据宽度和原图的宽和高计算所略图的高度)
6。可以判断是否已经存在文件
7。如果不覆盖,则给出错误
8。如果选中"覆盖原图"checkbox,则覆盖原图。
9。可以根据要求,在webform上设置1个以上的file input和相应的checkbox
10。并在文件上传完毕后,显示原图的文件名,尺寸,字节,和
11。缩略图的文件名尺寸。
12。缩略图的文件名格式:原图+"_thumb."+指定格式,如:test.jpg_thumb.gif,以便于管理。

--------------------
public void UploadFile(object sender, Sy***m.EventArgs e)
{

string imgNameOnly, imgNameNoExt, imgExt;
string imgThumbnail;
int erroNumber = 0;
Sy***m.Drawing.Image oriImg, newImg;
string strFePicSavePath = Co***gurationSettings.AppSettings["FePicSavePath"].ToString();
string strFePicThumbFormat = Co***gurationSettings.AppSettings["FePicThumbFormat"].ToString().ToLower();
int intFeThumbWidth = In***.Parse(Co***gurationSettings.AppSettings["FePicThumbWidth"]);
string fileExt;

StringBuilder picInfo = new StringBuilder();

if(Pa***IsValid)
{


for(int i = 0;i < Re***st.Files.Count; i++)
{
HttpPostedFile PostedFile = Re***st.Files[i];
fileExt = (Sy***m.IO.Path.GetExtension(Po***dFile.FileName)).ToString().ToLower();

imgNameOnly = Sy***m.IO.Path.GetFileName(Po***dFile.FileName);
if(fileExt == ".jpg" || fileExt == ".gif" || fileExt == ".png")
{

if(Sy***m.IO.File.Exists(strFePicSavePath + imgNameOnly) && (ch***boxlistRewrite.Items[i].Selected == false))
{
erroNumber = erroNumber + 1;
pi***fo.Append("错误:文件("+ (i+1) +") " + imgNameOnly + " 已经存在,请修改文件名
" );
}
}
else
{
erroNumber = erroNumber + 1;
pi***fo.Append("错误:文件("+ (i+1) +") " + imgNameOnly + " 扩展名 " + fileExt + " 不被许可
" );
}

}

if(erroNumber > 0)
{
pi***fo.Append("全部操作均未完成,请修改错误,再进行操作
");
}
else
{
for(int i = 0;i < Re***st.Files.Count; i++)
{

HttpPostedFile PostedFile = Re***st.Files[i];
imgNameOnly = Sy***m.IO.Path.GetFileName(Po***dFile.FileName);
imgNameNoExt = Sy***m.IO.Path.GetFileNameWithoutExtension(Po***dFile.FileName);
imgExt = Sy***m.IO.Path.GetExtension(Po***dFile.FileName).ToString().ToLower();


oriImg = Sy***m.Drawing.Image.FromStream(Po***dFile.InputStream);
newImg = or***g.GetThumbnailImage(intFeThumbWidth, intFeThumbWidth * or***g.Height/or***g.Width,null,new Sy***m.IntPtr(0));
switch(imgExt)
{
//case ".jpeg":
case ".jpg":
or***g.Save(strFePicSavePath + imgNameOnly , Sy***m.Drawing.Imaging.ImageFormat.Jpeg);
break;
case ".gif":
or***g.Save(strFePicSavePath + imgNameOnly , Sy***m.Drawing.Imaging.ImageFormat.Gif);
break;
case ".png":
or***g.Save(strFePicSavePath + imgNameOnly , Sy***m.Drawing.Imaging.ImageFormat.Png);
break;
}

//or***g.Save(Co***gurationSettings.AppSettings["FePicSavePath"] + imgNameNoExt + ".jpg", Sy***m.Drawing.Imaging.ImageFormat.Jpeg);

switch(strFePicThumbFormat)
{
//jpeg format can get the smallest file size, and the png is the largest size
//case "jpeg":
case "jpg":
ne***g.Save(strFePicSavePath + imgNameOnly + "_thumb.jpg",Sy***m.Drawing.Imaging.ImageFormat.Jpeg);
imgThumbnail = imgNameOnly + "_thumb.jpg";
break;
case "gif":
ne***g.Save(strFePicSavePath + imgNameOnly + "_thumb.gif",Sy***m.Drawing.Imaging.ImageFormat.Gif);
imgThumbnail = imgNameOnly + "_thumb.gif";
break;
case "png":
ne***g.Save(strFePicSavePath + imgNameOnly + "_thumb.png",Sy***m.Drawing.Imaging.ImageFormat.Png);
imgThumbnail = imgNameOnly + "_thumb.png";
break;
default:
ne***g.Save(strFePicSavePath + imgNameOnly + "_thumb.jpg",Sy***m.Drawing.Imaging.ImageFormat.Jpeg);
imgThumbnail = imgNameOnly + "_thumb.jpg";
break;

}//switch

pi***fo.Append("文件 名:" + imgNameOnly + " ( " + or***g.Width + " x " + or***g.Height + " ) " + Po***dFile.ContentLength/1024 + "KB
");
pi***fo.Append("缩略图名:" + imgThumbnail + " ( " + ne***g.Width + " x " + ne***g.Height + " )

");

or***g.Dispose();
ne***g.Dispose();

}//for
pi***fo.Append("所有操作成功
");

}// if erronumber = 0

 

}
else
{
pi***fo.Append("有错误,请检查。操作未成功
");

}

lb***cInfo.Text = pi***fo.ToString();

}