说明:开发环境 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. 【BZOJ3524】Couriers(主席树)

    题意:给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. n,m≤5000 ...

  2. 反汇编->C++引用与指针

    先看一段最简单代码 #include<iostream> #include<stdlib.h> using namespace std; int main() { int te ...

  3. 計算 battery impedence

    Origin 一顆電池被拉載後,會產生電流及電壓如下圖, 如何計算其電池內阻呢 其公式為 R = |delta(V) / delta(I)| 公式推導如下: V1 = 10 - I1R --- 左圖 ...

  4. Xcode 如何计算整个项目的代码行数

    参考链接:https://www.cnblogs.com/sunfuyou/p/7921538.html 1.打开终端 2.cd 空格 将工程的文件夹拖到终端上,回车,此时进入到工程的路径 此时已经进 ...

  5. (5)Unity3d GUI

  6. 51Nod 约数之和

                              1220 约数之和                                  题目来源: Project Euler 基准时间限制:3 秒 ...

  7. 访问权限修饰符Protected专题

    上图描述:A类在a包下,m()方法被protected修饰 上图描述:B类也在a包下,B类是A类的子类. 解析:B类和A类是同包类,B类是A类的子类,因此b对象可以调用m()方法. 上图描述:C类也在 ...

  8. 具体一些的博弈论 sqrstone

    Description 你有n个盒子用来放石头,每个盒子都有最大容量与初始的石头数, 两个人轮流放石头,每次必须选择一个盒子往里放数量不超过当前盒子中石头数的平方的石头 比如一个盒子当前有3个石头,你 ...

  9. n*n的正方形网格中有多少个长方形

    n*n的正方形网格中有横竖各n+1条直线,其中,任意各取两条都可以组成一个长方形﹙正方形也是长方形﹚.所以长方形个数为C﹙n+2,2﹚×C﹙n+2,2﹚=﹙n+1﹚²n²/4个.如果正方形不算,则N= ...

  10. jquery的ajax的success和fail用法

    $.ajax({ type:"POST", url: url, contentType: 'application/json;charset=utf-8', data: JSON. ...