C#.Net 上传图片,限制图片大小,检查类型完整版
C#.Net 上传图片,限制图片大小,检查类型完整版
源代码:
处理图片类,如检查图片大小,按宽度比例缩小图片
{
public enum ValidateImageResult { OK, InvalidFileSize, InvalidImageSize }
//检查图片大小
public static ValidateImageResult ValidateImage(string file, int MAX_FILE_SIZE, int MAX_WIDTH, intMAX_HEIGHT)
{
byte[] bs = File.ReadAllBytes(file);
double size = (bs.Length / 1024);
//大于50KB
if (size > MAX_FILE_SIZE) return ValidateImageResult.InvalidFileSize;
Image img = Image.FromFile(file);
if (img.Width > MAX_WIDTH || img.Height > MAX_HEIGHT) returnValidateImageResult.InvalidImageSize;
return ValidateImageResult.OK;
}
//按宽度比例缩小图片
public static Image GetOutputSizeImage(Image imgSource, int MAX_WIDTH)
{
Image imgOutput = imgSource;
Size size = new Size(imgSource.Width, imgSource.Height);
if (imgSource.Width <= 3 || imgSource.Height <= 3) return imgSource; //3X3大小的图片不转换
if (imgSource.Width > MAX_WIDTH || imgSource.Height > MAX_WIDTH)
{
double rate = MAX_WIDTH / (double)imgSource.Width;
if (imgSource.Height * rate > MAX_WIDTH)
rate = MAX_WIDTH / (double)imgSource.Height;
size.Width = Convert.ToInt32(imgSource.Width * rate);
size.Height = Convert.ToInt32(imgSource.Height * rate);
imgOutput = imgSource.GetThumbnailImage(size.Width, size.Height, null, IntPtr.Zero);
}
return imgOutput;
}
//按比例缩小图片
public static Image GetOutputSizeImage(Image imgSource, Size outSize)
{
Image imgOutput = imgSource.GetThumbnailImage(outSize.Width, outSize.Height, null, IntPtr.Zero);
return imgOutput;
}
public static byte[] GetImageBytes(string imageFileName)
{
Image img = Image.FromFile(imageFileName);
return GetImageBytes(img);
}
public static byte[] GetImageBytes(Image img)
{
if (img == null) return null;
try
{
System.IO.MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg);
byte[] bs = ms.ToArray();
ms.Close();
return bs;
}
catch { return null; }
}
public static Image FromBytes(byte[] bs)
{
if (bs == null) return null;
try
{
MemoryStream ms = new MemoryStream(bs);
Image returnImage = Image.FromStream(ms);
ms.Close();
return returnImage;
}
catch { return null; }
}
}
上传文件自定义类. 业务逻辑全部在CFileUpload类!
{
private FileUpload _fileUpload;
private string _savePath;
private string _LastUploadedFile = string.Empty;
private bool _AutoGenFileName = false;
public string LastUploadedFile { get { return _LastUploadedFile; } }
private string PICTURE_FILE = "[.gif.png.jpeg.jpg.bmp]";
private string ZIP_FILE = "[.zip.rar]";
private string MUILT_MEDIA_FILE = "[.mpeg.mpg.fla.exe.wma]";
private int IMG_MAX_WIDTH = 0;//未指定宽度
private int IMG_MAX_HEIGHT = 0;//未指定高度
/// <summary>
/// 构造器
/// </summary>
/// <param name="fileUpload">Asp.net FileUpload对象</param>
/// <param name="savePath">保存目录,不包含文件名</param>
/// <param name="autoGenFileName">自动生成文件名</param>
public CFileUpload(FileUpload fileUpload, string savePath, bool autoGenFileName)
{
_savePath = savePath;
_fileUpload = fileUpload;
_AutoGenFileName = autoGenFileName;
}
/// <summary>
/// 构造器
/// </summary>
/// <param name="fileUpload">Asp.net FileUpload对象</param>
/// <param name="savePath">保存目录,不包含文件名</param>
public CFileUpload(FileUpload fileUpload, string savePath)
{
_savePath = savePath;
_fileUpload = fileUpload;
}
/// <summary>
/// 上传RAR文件
/// </summary>
public bool UploadRARFile()
{
return DoUpload(ZIP_FILE);
}
/// <summary>
/// 上传视频文件
/// </summary>
public bool UploadVideo()
{
return DoUpload(MUILT_MEDIA_FILE);
}
/// <summary>
/// 上传图片文件
/// </summary>
public bool UploadImage()
{
return DoUpload(PICTURE_FILE);
}
public bool UploadImage(int maxWidth, int maxHeight)
{
this.IMG_MAX_WIDTH = maxWidth;
this.IMG_MAX_HEIGHT = maxHeight;
return DoUpload(PICTURE_FILE);
}
/// <summary>
/// 上传任何支持的文件
/// </summary>
public bool UploadAnySupported()
{
return DoUpload(PICTURE_FILE + ZIP_FILE + MUILT_MEDIA_FILE);
}
/// <summary>
/// 生成新的文件名
/// </summary>
private string GetNewFileName(string folder, string fileName)
{
//_AutoGenFileName==true 或者文件名长度>50,自动生成32位GUID文件名
if (_AutoGenFileName || StrUtils.GetStringLength(fileName) >= 50)
{
string ext = System.IO.Path.GetExtension(fileName);
string newfile = Guid.NewGuid().ToString().Replace("-", "") + ext;
return folder + newfile;
}
else
{
if (System.IO.File.Exists(folder + fileName))
{
string ext = System.IO.Path.GetExtension(fileName);
string filebody = fileName.Replace(ext, "");
int x = 1;
while (true) //如果文件存在,生成尾部带(x)的文件
{
string newfile = folder + filebody + "(" + x.ToString() + ")" + ext;
if (!System.IO.File.Exists(newfile))
return folder + filebody + "(" + x.ToString() + ")" + ext;
else
x++;
}
}
else
return folder + fileName;
}
}
/// <summary>
/// 最大支持小于1MB的文件。
/// </summary>
private bool AllowMaxSize(int fileLength)
{
int MAX_SIZE_UPLOAD = 1024;//最大支持上传小于1MB的文件。
double kb = fileLength / 1024;
return (int)kb < MAX_SIZE_UPLOAD;
}
private bool DoUpload(string allowedExtensions)
{
bool fileOK = false;
if (!_fileUpload.HasFile) return false; //上传控件中如果不包含文件,退出
// 得到文件的后缀
string fileExtension = System.IO.Path.GetExtension(_fileUpload.FileName).ToLower();
// 看包含的文件是否是被允许的文件后缀
fileOK = allowedExtensions.IndexOf(fileExtension) > 0;
//检查上传文件大小
fileOK = fileOK & AllowMaxSize(_fileUpload.FileBytes.Length);
if (!fileOK) return false; //如检查不通过,退出
try
{
// 文件另存在服务器指定目录下
string savefile = GetNewFileName(_savePath, _fileUpload.FileName);
if (IsUploadImage(fileExtension))//保存图片
{
System.Drawing.Image output = CImageLibrary.FromBytes(_fileUpload.FileBytes);
// 检查图片宽度/高度/大小
if (this.IMG_MAX_WIDTH != 0 && output.Width > this.IMG_MAX_WIDTH)
{
output = CImageLibrary.GetOutputSizeImage(output, this.IMG_MAX_WIDTH);
}
Bitmap bmp = new Bitmap(output);
bmp.Save(savefile, output.RawFormat);
}
else//其它任何文件
{
_fileUpload.PostedFile.SaveAs(savefile);
}
_LastUploadedFile = savefile;
return true;
}
catch
{
return false;
}
}
private bool IsUploadImage(string fileExtension)
{
bool isImage = PICTURE_FILE.IndexOf(fileExtension) > 0;
return isImage;
}
}
使用说明:
页面的Button.Click事件
{
try
{
if (!FileUploadImg.HasFile) return;
string virtualFilePath = "~//" + CAppConfiguration.Current.BbsUploadFilePath;
string savePath = this.Server.MapPath(virtualFilePath); //保存文件物理路径
//调用CFileUpload类
CFileUpload upload = new CFileUpload(FileUploadImg, savePath, false);
//上传图片文件
bool ret = upload.UploadImage();
if (ret)
{
string filename = System.IO.Path.GetFileName(upload.LastUploadedFile);
string imgHTML = "<img alt=''''贴图图片'''' src=''''{0}'''' />";
this.hfLastUploadImage.Value = filename;
string root = CGlobals.GetHttpRoot(this);
imgHTML = string.Format(imgHTML, root + "/" + CAppConfiguration.Current.BbsUploadFilePath + filename);
FreeTextBox1.Text = FreeTextBox1.Text + "<br/>" + imgHTML;
lblUploadImg.ForeColor = Color.Green;
lblUploadImg.Visible = true;
lblUploadImg.Text = "上传文件成功!";
}
else
{
lblUploadImg.ForeColor = Color.Red;
lblUploadImg.Visible = true;
lblUploadImg.Text = "不支持格式或上传失败!";
}
}
catch (Exception ex)
{
CMsg.ShowException(this, ex);
}
}
C#.Net 上传图片,限制图片大小,检查类型完整版的更多相关文章
- jquery实现上传图片及图片大小验证、图片预览效果代码
jquery实现上传图片及图片大小验证.图片预览效果代码 jquery实现上传图片及图片大小验证.图片预览效果代码 上传图片验证 */ function submit_upload_picture() ...
- 关于PHP HTML <input type="file" name="img"/>上传图片,图片大小,宽高,后缀名。
在我们的系统中,不免要上传图片,视频等文件,在上传中,需要做的一些判断,文件大小等方面. 注意: 在php.ini 中的post_max_size,upload_max_filesize默认为2M,在 ...
- 判断pdf、word文档、图片等文件类型(格式)、大小的简便方法
判断pdf.word文档.图片等文件类型(格式).大小的简便方法 很久没发文了,今天有时间就写一下吧. 关于上传文件,通常我们都需要对其进行判断,限制上传的类型,如果是上传图片,我们甚至会把图片转化成 ...
- SpringMVC 图片上传,检查图片大小
使用SpringMVC+Spring 前端提交图片文件到Controller,检查上传图片大小是否符合要求 直接上代码了 1.校验图片大小 这里提供出验证的方法,用于在需要校验的地方调用 /** * ...
- js 上传图片,用户自定义截取图片大小
js 上传图片,用户自定义截取图片大小 js 组件
- java关于图片处理修改图片大小
最近做了一个关于图片浏览的内容.因为图片都是一些证件的资料的扫描件所以比较大,对系统的影响也是非常之大的,有很大可能直接把系统干死.那么我是这么处理的,给大家分享一下.如果大家有好的方案的话一定要早点 ...
- 在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片
在"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"一文中,使用JSAjaxFileUploader这款插件实现了单文 ...
- struts2--上传总结(限制大小和类型 非法上传的跳转)
网上有很多版本,鉴于实践出真知的态度 我自己探索了一番 struts版本:2.3.16 限制大小: struts2默认是2M 所以如果要扩大大小限制,应该先配一个全局struts2最大上限 <c ...
- 图片处理:html文本获取图片Url,判断图片大小,存数据库
1.从html文本获取图片Url /** * html文本中取出url链接 */ public class Url { public static void main(String[] args) { ...
随机推荐
- angularjs+jasmine单元测试入门
使用cordova.angularjs.ionic开发hybrid App有一段时间了.为了做单元测试,之前一直是把要测的某一部分产品代码复制到另一个单独的工程中来写测试代码,测好了以后再复制回去.弊 ...
- 5.4 String
JAVA 中为什么String 是immutable的? 1.设计:当创建一个String(String str2 = "abc"), 如果它(原先有一个String str = ...
- 从0开始学Swift笔记整理(一)
Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制.Swift 采用安全的编程模式,增加了现代 ...
- 个性二维码开源专题<介绍篇>
由C#编写的个性二维码底层,已应用到 码晒客/疯狂创意二维码等项目上,并获得多项软件著作专利. 疯狂创意二维码 疯狂创意二维码是可用于生成风格独特的个性化二维码生成器,用户可以将目标信息输入到二维码生 ...
- 撰写合格的REST API
原文 : http://mp.weixin.qq.com/s?__biz=MzA3NDM0ODQwMw==&mid=208060670&idx=1&sn=ce67b889698 ...
- solr与.net系列课程(二)solr的配置文件及其含义
solr与.net系列课程(二)solr的配置文件及其含义 本节内容还是不会涉及到.net与数据库的内容,但是不要着急,这都是学时solr必学要掌握的东西,solr可不是像其他的dll文件一样,只需 ...
- CentOS系统下Hadoop 2.4.1集群安装配置(简易版)
安装配置 1.软件下载 JDK下载:jdk-7u65-linux-i586.tar.gz http://www.oracle.com/technetwork/java/javase/downloads ...
- [JS] HTML QQ分享界面js代码
@ - @ :可以自己指定分享内容等....内含JS脚本 <html> <head> <title></title> <script type=& ...
- jQuery的XX如何实现?——3.data与cache机制
往期回顾: jQuery的XX如何实现?——1.框架 jQuery的XX如何实现?——2.show与链式调用 -------------------------- 源码链接:内附实例代码 jQuery ...
- .NET 自带的动态代理+Expression 实现AOP
下面代码(摘抄之别处,原创在哪不知)是采用TransparentProxy和RealProxy实现对象的动态代理.碍于其使用反射掉用方法,所以就小试着将反射改成Expression以提高执行的效率.第 ...