c#多图片上传并生成缩略图的实例代码
c#多图片上传并生成缩略图的实例代码
发布时间:2016-12-29 来源:查字典编辑
摘要:前台代码:复制代码代码如下:li{list-style:none;padding-top:10px;}functionValidImage(...

前台代码:

复制代码 代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title></title>

<style type="text/css">

li

{

list-style: none;

padding-top: 10px;

}

</style>

<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>

<script type="text/javascript">

function ValidImage(id, msg) {

$(id).parent().append("<span>" + msg + "</span>");

return false;

}

</script>

</head>

<body>

<form id="form1" runat="server" enctype="multipart/form-data" method="post">

<div>

<ul>

<li>

<input type="file" id="upload1" name="upload" />

</li>

<li>

<input type="file" id="upload2" name="upload" />

</li>

<li>

<input type="file" id="upload3" name="upload" />

</li>

<li>

<input type="file" id="upload4" name="upload" /></li>

<li>

<input type="file" id="upload5" name="upload" />

</li>

<li>

<input type="submit" id="btnPostFile" runat="server" onserverclick="btnPostFile_ServerClick" value="开始上传" />

</li>

</ul>

</div>

</form>

</body>

</html>

前台就是几个控件和一个ValidImage方法。

后台代码:

复制代码 代码如下:

protected void btnPostFile_ServerClick(object sender, EventArgs e)

{

string filePath = Server.MapPath("/uploadImg");

const int size = 5242880;

if (!Directory.Exists(filePath))

{

Directory.CreateDirectory(filePath);

}

if (Request.Files.Count > 0)

{

for (int i = 0; i < Request.Files.Count; i++)

{

HttpPostedFile postFile = Request.Files[i];

string uploadFileID = string.Format("#upload{0}", i + 1); //当前的上传控件ID,因为jquery要调用就加了#

string msg = null; //提示信息

if (postFile.FileName.Trim().Length <= 0)

{

continue;

}

if (postFile.ContentLength > size)

{

msg = "文件太大";

Page.ClientScript.RegisterStartupScript(GetType(), "", "ValidImage(" + uploadFileID + "," + msg + ")", true);//将提示信息发送到客户端

continue;

}

string savePath = Path.Combine(filePath, postFile.FileName); //图片的保存地址

if (!File.Exists(savePath))

{

postFile.SaveAs(Path.Combine(filePath, postFile.FileName)); //如果文件不存在就保存

}

else

{

msg = "文件" + postFile.FileName + "已经存在";

Page.ClientScript.RegisterStartupScript(GetType(), "", "ValidImage(" + uploadFileID + "," + msg + ")", true);//将提示信息发送到客户端

continue;

}

if (IsImg(savePath)) //通过IsImg方法验证文件是否是图片,或者格式是否正确

{

SmallImg(postFile.InputStream, postFile.FileName);

}

else

{

msg = "只能上传JGP、PNG类型的图片,请检查文件格式是否正确";

Page.ClientScript.RegisterStartupScript(GetType(), "", "ValidImage(" + uploadFileID + "," + msg + ")", true);//将提示信息发送到客户端

File.Delete(savePath); //如果不是图片就删除

}

}

}

}

复制代码 代码如下:

#region 验证上传文件的格式

/// <summary>

/// 验证上传文件是否是图片

/// </summary>

/// <param name="FilePath">文件的保存路径</param>

/// <returns></returns>

private bool IsImg(string FilePath)

{

using (FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read))

{

bool result = false;

BinaryReader br = new BinaryReader(fs, System.Text.Encoding.UTF8);

string strImg = "";

byte buffer;

try

{

buffer = br.ReadByte();

strImg = buffer.ToString();

buffer = br.ReadByte();

strImg += buffer.ToString();

}

catch

{

fs.Close();

br.Close();

}

if (strImg == "255216" || strImg == "13780")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar

{

result = true;

}

return result;

}

}

#endregion

复制代码 代码如下:

#region 将图片生成缩略图

/// <summary>

/// 生成缩略图

/// </summary>

private void SmallImg(Stream oStream, string FileName)

{

using (System.Drawing.Image img = System.Drawing.Image.FromStream(oStream))

{

int newWidth = 100;

int newHeight = 80;

int oldWidth = img.Width;

int oldHeight = img.Height;

if (oldWidth > oldHeight)

{

newHeight = (int)Math.Floor((double)oldHeight * (double)newWidth / (double)oldWidth);

}

else

{

newWidth = (int)Math.Floor((double)oldWidth * (double)newHeight / (double)oldHeight);

}

using (Bitmap bmp = new Bitmap(newWidth, newHeight))

{

using (Graphics g = Graphics.FromImage(bmp))

{

g.Clear(Color.Transparent);

g.InterpolationMode = InterpolationMode.High;

g.CompositingQuality = CompositingQuality.HighQuality;

g.SmoothingMode = SmoothingMode.HighQuality;

g.DrawImage(img, new Rectangle(0, 0, newWidth, newHeight), new Rectangle(0, 0, oldWidth, oldHeight), GraphicsUnit.Pixel);

string newFileName = Path.GetFileNameWithoutExtension(FileName) + "_small" + Path.GetExtension(FileName); //缩略图名称

string filePath = Server.MapPath("/uploadImg/") + newFileName;

bmp.Save(filePath);

}

}

}

}

#endregion

代码有很多需要改进的地方,希望大家多多指点。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新asp.net教程学习
热门asp.net教程学习
编程开发子分类