说明:开发环境 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 = ;
Int32 offid = ;
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 > )
{
string[] picName = file.FileName.Split('.');
//判断文件的类型
if (picName[] == "jpg" || picName[] == "gif" || picName[] == "png" || picName[] == "bmg" || picName[] == "jpeg")
{
//给上传文件重命名
string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Guid.NewGuid().ToString();
//文件保存的路径
string filesavepath = filename + "." + picName[];
//保存图片
//var path = Path.Combine(pathForSaving, file.FileName);
var path = Path.Combine(pagePath, filename + "." + picName[]);
file.SaveAs(path);
}
}
}
}
}

注释:

string pathForSaving = Server.MapPath("~/img"); img是项目文件夹,上传的图片都保存到img文件夹下
(2)、对上传的图片压缩处理,并且把图片保存为png格式
   public void MultiSavePage(IEnumerable<HttpPostedFileBase> files)
{
Int32 count = files.Count();
Int32 pid = ;
Int32 offid = ;
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 > )
{
string[] picName = file.FileName.Split('.');
//判断文件的类型
if (picName[] == "jpg" || picName[] == "gif" || picName[] == "png" || picName[] == "bmg" || picName[] == "jpeg")
{
//给上传文件重命名
string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Guid.NewGuid().ToString();
//文件保存的路径
string filesavepath = filename + "." + picName[];
//保存图片
//var path = Path.Combine(pathForSaving, file.FileName);
var path = Path.Combine(pagePath, filename + "." + picName[]);
//file.SaveAs(path);
Bitmap bitmapTem = (Bitmap)Image.FromStream(file.InputStream);//file图片文件转换为bitmap //压缩图片 Bitmap bitmapLast = ZoomImage(bitmapTem, , );
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 = , height = ;
//按比例缩放
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) / , (destHeight - height) / , width, height), , , sourImage.Width, sourImage.Height, GraphicsUnit.Pixel);
g.Dispose();
//设置压缩质量
System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
long[] quality = new long[];
quality[] = ;
System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
encoderParams.Param[] = encoderParam;
sourImage.Dispose();
return destBitmap;
}
catch
{
return bitmap;
}
}
 

html5 file 上传图片的更多相关文章

  1. jquery html5 file 上传图片显示图片

    jquery js 的代码:不同浏览器下的路径 //建立一個可存取到該file的url function getObjectURL(file) {     var url = null ;     i ...

  2. HTML5 File API — 让前端操作文件变的可能

    前言 在 HTML5 File API 出现之前,前端对于文件的操作是非常有局限性的,大多需要配合后端实现.出于安全角度考虑,从本地上传文件时,代码不可能获取文件在用户本地的地址,所以纯前端不可能完成 ...

  3. HTML5 File API 全介绍

    在 HTML5 File API 出现之前,前端对于文件的操作是非常有局限性的,大多需要配合后端实现.出于安全角度考虑,从本地上传文件时,代码不可能获取文件在用户本地的地址,所以纯前端不可能完成一些类 ...

  4. Html5——File、FileReader、Blob、Fromdata对象

    File File 接口提供有关文件的信息,并允许网页中的JavaScript访问其内容. File对象可以用来获取某个文件的信息,还可以用来读取这个文件的内容.通常情况下,File对象是来自用户在一 ...

  5. HTML5 file API加canvas实现图片前端JS压缩并上传

    一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...

  6. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  7. 【转发】Html5 File Upload with Progress

    Html5 File Upload with Progress               Posted by Shiv Kumar on 25th September, 2010Senior Sof ...

  8. HTML5 File api 实现断点续传

    目前市场上大多数的网站的断点上传都是需要安装浏览器插件的,本文就针对高级浏览器的环境下,通过HTML5 File api实现断点上传进行说明 一.实现文件多选 HTML5的<input>新 ...

  9. 简单的html5 File base64 图片上传

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 【NOIP2016练习】T2 旅行(树形DP,换根)

    题意:小C上周末和他可爱的同学小A一起去X湖玩. X湖景区一共有n个景点,这些景点由n-1条观光道连接着,从每个景点开始都可以通过观光道直接或间接地走到其他所有的景点.小C带着小A从1号景点开始游玩. ...

  2. LOJ#2304. 「NOI2017」泳池

    $n \leq 1e9$底边长的泳池,好懒啊泥萌自己看题吧,$k \leq 1000$.答案对998244353取膜. 现在令$P$为安全,$Q$为危险的概率.刚好$K$是极其不好算的,于是来算$\l ...

  3. 转 Python常见数据结构整理

    http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...

  4. 在Eclipse中打开Hadoop工程

    1. 安装虚拟机,我用的是VMware Workstation 12 Player 2. 在VM中安装Ubuntu,我用的镜像文件是ubuntu-15.10-desktop-amd64.iso 3. ...

  5. echarts 金字塔

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Pollard_rho定理 大数的因数个数 这个板子超级快

    https://nanti.jisuanke.com/t/A1413 AC代码 #include <cstdio> #include <cstring> #include &l ...

  7. 嗅探X-Windows服务按键工具xspy

    嗅探X-Windows服务按键工具xspy   X-Windows完整名字是X Windows图形用户接口.它是一种计算机软件系统和网络协议.它为联网计算机提供了一个基础的图形用户界面(GUI)和丰富 ...

  8. 第3章 Spring Boot 入门指南

    Part II. 入门指南 如果你刚刚开始使用Spring Boot,这是你的一部分内容! 在这里我们将会回答一些基本的“what?”, “how?” 和 “why?”的问题. 在这里你会找到一个详细 ...

  9. android清除缓存为什么总是存在12k?

    转载请注明出处:http://blog.csdn.net/droyon/article/details/41116529 android手机在4.2之后.清除缓存总是会残留12k的大小.预计强迫症患者 ...

  10. [转载] C/C++中怎样获取日期和时间

    C/C++中怎样获取日期和时间摘要:  本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时.时间的获取.时间的计算和显示格式等方面进行了阐述.本文还通过大量的 ...