说明:开发环境 vs2012 mvc4项目,后台语言csharp
1、前端代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>图片上传测试</title>
</head>
<body>
<form action="/Home/MultiSavePage" enctype="multipart/form-data" method="post">
<input type="file" name="files" id="file1" onchange="checkPic(this)" /><br/>
<input type="file" name="files" id="file2" onchange="checkPic(this)"/><br/>
<input type="file" name="files" id="file3" onchange="checkPic(this)"/><br/>
<input type="submit" value="同时上传多个文件" />
</form>
<script type="text/javascript">
function checkPic(e) { if (!e || !e.value) return; var patn = /\.jpg$|\.jpeg$|\.png$|\.gif$/i; if (!patn.test(e.value)) { alert("您选择的似乎不是图像文件。"); e.value = ""; return; } else { //以下的代码可以 把选中的图片 放到img中显示
var $file = $(e); var fileObj = $file[0]; var windowURL = window.URL || window.webkitURL; var dataURL; //var $img = $("#"+id+"");
if (fileObj && fileObj.files && fileObj.files[0]) { dataURL = windowURL.createObjectURL(fileObj.files[0]); console.log(dataURL); //$img.attr(‘src‘, dataURL);
} } } </script>
</body>
</html>
2、控制器代码
action=”/Home/MultiSavePage” 对应的后台代码
(1)、正常保存图片,不对图片压缩处理
public void MultiSavePage(IEnumerable<HttpPostedFileBase> files) { Int32 count = files.Count(); Int32 pid = 56; Int32 offid = 100; string str = "GX"; string pathForSaving = Server.MapPath("~/img"); string pagePath = pathForSaving + "/" + offid + "/" + str + "/" + pid; if (this.CreateFolderIfNeeded(pagePath)) { foreach (var file in files) { if (file != null && file.ContentLength > 0) { string[] picName = file.FileName.Split(‘.‘); //判断文件的类型
if (picName[1] == "jpg" || picName[1] == "gif" || picName[1] == "png" || picName[1] == "bmg" || picName[1] == "jpeg") { //给上传文件重命名
string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Guid.NewGuid().ToString(); //文件保存的路径
string filesavepath = filename + "." + picName[1]; //保存图片 //var path = Path.Combine(pathForSaving, file.FileName);
var path = Path.Combine(pagePath, filename + "." + picName[1]); file.SaveAs(path); } } } } }
注释:
string pathForSaving = Server.MapPath("~/img"); img是项目文件夹,上传的图片都保存到img文件夹下
(2)、对上传的图片压缩处理,并且把图片保存为png格式
public void MultiSavePage(IEnumerable<HttpPostedFileBase> files) { Int32 count = files.Count(); Int32 pid = 56; Int32 offid = 100; string str = "GX"; string pathForSaving = Server.MapPath("~/img"); string pagePath = pathForSaving + "/" + offid + "/" + str + "/" + pid; if (this.CreateFolderIfNeeded(pagePath)) { foreach (var file in files) { if (file != null && file.ContentLength > 0) { string[] picName = file.FileName.Split(‘.‘); //判断文件的类型
if (picName[1] == "jpg" || picName[1] == "gif" || picName[1] == "png" || picName[1] == "bmg" || picName[1] == "jpeg") { //给上传文件重命名
string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Guid.NewGuid().ToString(); //文件保存的路径
string filesavepath = filename + "." + picName[1]; //保存图片 //var path = Path.Combine(pathForSaving, file.FileName);
var path = Path.Combine(pagePath, filename + "." + picName[1]); //file.SaveAs(path);
Bitmap bitmapTem = (Bitmap)Image.FromStream(file.InputStream);//file图片文件转换为bitmap //压缩图片
Bitmap bitmapLast = ZoomImage(bitmapTem, 331, 600); bitmapLast.Save(path, System.Drawing.Imaging.ImageFormat.Png); } } } } }
3、用到的其他方法
// 检查是否要创建上传文件夹
private bool CreateFolderIfNeeded(string path) { bool result = true; if (!Directory.Exists(path)) { try { Directory.CreateDirectory(path); } catch (Exception) { //TODO:处理异常
result = false; } } return result; }
4、压缩图片的方法
using System.Drawing;
//等比例缩放图片 //destHeight 331 destWidth 600
private Bitmap ZoomImage(Bitmap bitmap, int destHeight, int destWidth) { try { System.Drawing.Image sourImage = bitmap; int width = 0, height = 0; //按比例缩放
int sourWidth = sourImage.Width; int sourHeight = sourImage.Height; if (sourHeight > destHeight || sourWidth > destWidth) { if ((sourWidth * destHeight) > (sourHeight * destWidth)) { width = destWidth; height = (destWidth * sourHeight) / sourWidth; } else { height = destHeight; width = (sourWidth * destHeight) / sourHeight; } } else { width = sourWidth; height = sourHeight; } Bitmap destBitmap = new Bitmap(destWidth, destHeight); Graphics g = Graphics.FromImage(destBitmap); g.Clear(Color.Transparent); //设置画布的描绘质量
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(sourImage, new Rectangle((destWidth - width) / 2, (destHeight - height) / 2, width, height), 0, 0, sourImage.Width, sourImage.Height, GraphicsUnit.Pixel); g.Dispose(); //设置压缩质量
System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters(); long[] quality = new long[1]; quality[0] = 100; System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); encoderParams.Param[0] = encoderParam; sourImage.Dispose(); return destBitmap; } catch { return bitmap; } }
