MVC4 上传图片并生成缩略图
Views
- @using (Html.BeginForm("Create","img",FormMethod.Post, new { enctype = "multipart/form-data" }))
- {
- <table width="600" border="0">
- <tr>
- <td width="83">图片:</td>
- <td width="507"> <input type="file" name="filImgs" id="filImgs"/></td>
- </tr>
- <tr>
- <td>链接地址:</td>
- <td> @Html.EditorFor(model => model.LinkUrl)</td>
- </tr>
- <tr>
- <td> <b>排序: </b></td>
- <td> @Html.EditorFor(model => model.Orderby)</td>
- </tr>
- <tr>
- <td> </td>
- <td> <input type="button" onclick="Check(1)" value="新增" /></td>
- </tr>
- </table>
- }
JS
- function Check(str) {
- var img = $("#filImgs").val();
- var Orderby = $("#Orderby").val();
- var reg = new RegExp("^[0-9]*$");
- if(img.length<=0&&str==1)
- {
- alert('请上传图片');
- return false;
- }
- else if (Orderby.length <= 0) {
- alert("排序不能为空!");
- return false;
- }
- else if (Orderby.length > 0 && !reg.test(Orderby)) {
- alert("请输入数字!");
- return false;
- }
- else {
- document.forms[0].submit();
- }
- }
Conrollers
- private EFHelpDB db = new EFHelpDB();
- public ActionResult Create()
- {
- return View();
- }
- //
- // POST: /Admin/Img/Create
- [HttpPost]
- public ActionResult Create(tb_Img tb_img)
- {
- try
- {
- var file = Request.Files[0];
- var img = new upload().UpLoadImage(file, "/upfile/", "thumb_", 89, 71);
- if (img.IndexOf("thumb_") > -1)
- {
- tb_img.ImgUrl = img;
- }
- db.Img.Add(tb_img);
- db.SaveChanges();
- return RedirectToAction("Index");
- }
- catch(Exception ex)
- {
- return View("index");
- }
- }
Models
- public class tb_Img
- {
- public int ID { get; set; }
- public string LinkUrl { get; set; }
- public string ImgUrl { get; set; }
- public int Orderby { get; set; }
- }
上传图片类
- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.IO;
- using System.Drawing;
- using System.Web.UI.HtmlControls;
- namespace MVC.Models
- {
- public class upload
- {
- /// <summary>
- /// 图片上传
- /// </summary>
- /// <param name="fulFile">上传控件</param>
- /// <param name="DirectionName">文件所放的父文件夹</param>
- /// <returns>string</returns>
- public upload() { }
- /// <summary>
- /// asp.net上传图片并生成缩略图
- /// </summary>
- /// <param name="upImage">HttpPostedFileBase控件</param>
- /// <param name="sSavePath">保存的路径,些为相对服务器路径的下的文件夹</param>
- /// <param name="sThumbExtension">缩略图的thumb</param>
- /// <param name="intThumbWidth">生成缩略图的宽度</param>
- /// <param name="intThumbHeight">生成缩略图的高度</param>
- /// <returns>缩略图名称</returns>
- public string UpLoadImage(HttpPostedFileBase upImage, string sSavePath, string sThumbExtension, int intThumbWidth, int intThumbHeight)
- {
- string sThumbFile = "";
- string sFilename = "";
- if (upImage.FileName != null)
- {
- int nFileLen = upImage.ContentLength;
- if (nFileLen == 0)
- return "没有选择上传图片";
- //获取upImage选择文件的扩展名
- string extendName = System.IO.Path.GetExtension(upImage.FileName).ToLower();
- //判断是否为图片格式
- if (extendName != ".jpg" && extendName != ".jpge" && extendName != ".gif" && extendName != ".bmp" && extendName != ".png")
- return "图片格式不正确";
- byte[] myData = new Byte[nFileLen];
- upImage.InputStream.Read(myData, 0, nFileLen);
- sFilename = System.IO.Path.GetFileName(upImage.FileName);
- int file_append = 0;
- //检查当前文件夹下是否有同名图片,有则在文件名+1
- while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))
- {
- file_append++;
- sFilename = System.IO.Path.GetFileNameWithoutExtension(upImage.FileName)
- + file_append.ToString() + extendName;
- }
- System.IO.FileStream newFile
- = new System.IO.FileStream(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename),
- System.IO.FileMode.Create, System.IO.FileAccess.Write);
- newFile.Write(myData, 0, myData.Length);
- newFile.Close();
- //以上为上传原图
- try
- {
- //原图加载
- using (System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))
- {
- //原图宽度和高度
- int width = sourceImage.Width;
- int height = sourceImage.Height;
- int smallWidth;
- int smallHeight;
- //获取第一张绘制图的大小,(比较 原图的宽/缩略图的宽 和 原图的高/缩略图的高)
- if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight)
- {
- smallWidth = intThumbWidth;
- smallHeight = intThumbWidth * height / width;
- }
- else
- {
- smallWidth = intThumbHeight * width / height;
- smallHeight = intThumbHeight;
- }
- //判断缩略图在当前文件夹下是否同名称文件存在
- file_append = 0;
- sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(upImage.FileName) + extendName;
- while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sThumbFile)))
- {
- file_append++;
- sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(upImage.FileName) +
- file_append.ToString() + extendName;
- }
- //缩略图保存的绝对路径
- string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(sSavePath) + sThumbFile;
- //新建一个图板,以最小等比例压缩大小绘制原图
- using (System.Drawing.Image bitmap = new System.Drawing.Bitmap(smallWidth, smallHeight))
- {
- //绘制中间图
- using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))
- {
- //高清,平滑
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- g.Clear(Color.Black);
- g.DrawImage(
- sourceImage,
- new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight),
- new System.Drawing.Rectangle(0, 0, width, height),
- System.Drawing.GraphicsUnit.Pixel
- );
- }
- //新建一个图板,以缩略图大小绘制中间图
- using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight))
- {
- //绘制缩略图
- using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1))
- {
- //高清,平滑
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- g.Clear(Color.Black);
- int lwidth = (smallWidth - intThumbWidth) / 2;
- int bheight = (smallHeight - intThumbHeight) / 2;
- g.DrawImage(bitmap, new Rectangle(0, 0, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth, intThumbHeight, GraphicsUnit.Pixel);
- g.Dispose();
- bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- }
- }
- }
- }
- catch
- {
- //出错则删除
- System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename));
- return "图片格式不正确";
- }
- //返回缩略图名称
- return sThumbFile;
- }
- return "没有选择图片";
- }
- }
- }
MVC4 上传图片并生成缩略图的更多相关文章
- C#上传图片和生成缩略图以及图片预览
因工作需要,上传图片要增加MIME类型验证和生成较小尺寸的图片用于浏览.根据网上代码加以修改做出如下效果图: 前台代码如下: <html xmlns="http://www.w3.or ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- C#上传图片同时生成缩略图,控制图片上传大小。
#region 上传图片生成缩略图 /// <summary> /// 上传图片 /// </summary> /// <param name="sender& ...
- thinkphp上传图片,生成缩略图
Image.php <?php /** * 实现图片上传,图片缩小, 增加水印 * 需要定义以下常量 * define('ERR_INVALID_IMAGE', 1); * define('ER ...
- C# webform上传图片并生成缩略图
其实里面写的很乱,包括修改文件名什么的都没有仔细去写,主要是想记录下缩略图生成的几种方式 ,大家明白就好! void UpImgs() { if (FileUpload1.HasFile) { str ...
- Js上传图片并生成缩略图
Js上传图片并显示缩略图的流程为 Js选择文件->Jquery上传图片->服务器接收图片流->存储图片->返回结果到Js端->显示缩略图 本文上传图片所用的Js库是aja ...
- MVC3.0 上传图片并生成缩略图
转自:http://mikelai.blog.163.com/blog/static/18411126620118771732675/ Controller: public ActionResult ...
- 一例tornado框架下处理上传图片并生成缩略图的例子
class coachpic(RequestHandler): @gen.coroutine def post(self): picurl = self.request.files[] print(& ...
- Asp.Net 上传图片并生成高清晰缩略图
在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...
随机推荐
- Log4net系列二:Log4net邮件日志以及授权码
Log4net邮件发送 上篇文章我们主要介绍Log4net生成文本格式,本篇文章主要配置邮箱发送.关于项目的引用,搭建我们就不在描述,如果不太清楚,请看上篇文章, 老规矩,我们现在配置文件中添加一个a ...
- AJPFX总结I/O流操作(二)
FileWriter:该类没有特有的方法只有自己的构造函数.该类特点在于1,用于处理文本文件.2,该类中有默认的编码表,3,该类中有临时缓冲.构造函数:在写入流对象初始化时,必须要有一个存储数据的目的 ...
- codeforces415D. Glad to see you!(交互)
题意 交互题. 有$k$个值域为$[1, n]$的数. 请在不超过$60$次询问内找出其中的两个数. 每次询问形式为1 x y 交互库会返回$|x - a| <= |y - b| ? " ...
- 成为Android高手必须掌握的8项基本要求
[1] Android操作系统概述 1. Android系统架构. 2. Android利用设计理念. 3. Android 开源知识. 4. Android 参考网站与权威信息.[2] Androi ...
- iOS 根据屏幕宽度, 高度判断手机设备
#define iPhone_5 [UIScreen mainScreen].bounds.size.width == 320.0 #define iPhone_6 [UIScreen mainScr ...
- JD IPO address by liuqiangdong
Ladies and gentlemen, Good evening.I'd rather use english, not mandarin.Because during the road show ...
- vueCode 常用代码总结 20190116
<template>props 传参<in-body :mbx="['首页','','']"> props 代码使用<BreadcrumbItem&g ...
- JOIN和UNION的区别
join 是两张表根据条件相同的部分合并生成一个记录集. SELECT Websites.id, Websites.name, access_log.count, access_log.dateFRO ...
- python基础一 day2 字符串操作
s.capitalize() s.upper() s.lower() s.swapcase() s.title() s.center(20,"#") s.expand ...
- 第1节 flume:4、离线项目处理的整个架构图;5、flume的基本介绍;
第1节 flume:4.离线项目处理的整个架构图 辅助系统工具:flume,azkaban,sqoop. 在一个完整的离线大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心 ...