上传图片本身是个基本的小功能,但是到了移动端就不那么简单了,相信找到这篇文章的你一定有深深的同感。

本文实例是:在(移动端)页面中点击图片,然后选择文件,然后保存。使用Asp.net

难点一:后台获取不到FileUpload的文件

解决方案:在 form 中添加 enctype="multipart/form-data" data-ajax="false"

难点二:ios图片上传后显示为横向图片(ios横拍照片无此问题;Android无此问题)

解决方案:加载exif.js,使用Orientation属性判断其旋转角度

完整代码如下:

1)页面头部加载exif.js,下载地址:http://code.ciaoca.com/javascript/exif-js/

<head runat="server">
<script src="exif.js"></script>
</head>

2)页面HTML

<body>
<form id="form1" runat="server" enctype="multipart/form-data" data-ajax="false">
<div data-role="page" id="pageone">
<div data-role="main" id="mainBody">
<img src="img/errimg.jpg" onerror="this.src='/img/errimg.jpg'" id="imgUserIco" runat="server" />
       <asp:Button ID="Save" runat="server" OnClick="Save_Click" Text="保存" />
</div>
</div> <%--以下是Hidden--%>
<asp:FileUpload ID="fileImg" runat="server" onchange="imgUserIco2Preview(this);" Style="display: none" />
<asp:HiddenField ID="hidOrientation" runat="server" Value="1" />
</form>
</body>

3)点击图片的事件

$("#imgUserIco").on("click", function () {
$("#fileImg").click();
});

4)上传控件中的图片路径改变后的事件

function imgUserIco2Preview(o) {
  if (o.files && o.files[0]) {
    var file = o.files[0];
    var Orientation = null;//旋转角度:1)0度,3)180度, 6)顺时针90度,8)逆时针90度
    var fileName = file.name;
    var fileType = fileName.substr(fileName.lastIndexOf("."), fileName.length - fileName.lastIndexOf(".")).toLowerCase();
    if (".gif.png.jpeg.jpg.bmp".indexOf(fileType) > -1) {
      //保存旋转角度
      EXIF.getData(file, function () {
        //alert(EXIF.pretty(this));
        EXIF.getAllTags(this);
        //alert(EXIF.getTag(this, 'Orientation'));
        Orientation = EXIF.getTag(this, 'Orientation');
        $("#hidOrientation").val(Orientation);
      });       var reader = new FileReader();
      reader.onload = function (e) {
        $("#imgUserIco").attr("src", e.target.result);
      }
      reader.readAsDataURL(file);
    }   }
}

5)点击保存按钮后,后台代码


using System.IO;
using System.Drawing;

protected void Save_Click(object sender, EventArgs e)
{
try
{
BLL.TUser bllUser = new BLL.TUser();
Model.TUser modUser = bllUser.GetModel(((Model.TUser)Session["USERModel"]).ID); if (this.fileImg.HasFile)
{
//创建文件夹
if (!Directory.Exists(Server.MapPath("/") + "\\UploadFiles\\HeadIcon"))
{
Directory.CreateDirectory(Server.MapPath("/") + "\\UploadFiles\\HeadIcon");
if (!Directory.Exists(Server.MapPath("/") + "\\UploadFiles\\HeadIcon\\Img"))
{
Directory.CreateDirectory(Server.MapPath("/") + "\\UploadFiles\\HeadIcon\\Img");
} if (!Directory.Exists(Server.MapPath("/") + "\\UploadFiles\\HeadIcon\\temp"))
{
Directory.CreateDirectory(Server.MapPath("/") + "\\UploadFiles\\HeadIcon\\temp");
}
} //保存路径
string savePath = Server.MapPath("/") + "\\UploadFiles\\HeadIcon\\temp\\" + this.fileImg.FileName; //压缩并保存图片
int maxWidth = ;
System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(this.fileImg.FileContent);
int imgWidth = imgPhoto.Width;
int imgHeight = imgPhoto.Height;
if (imgWidth > maxWidth || imgHeight > maxWidth)
{
int newWidth = imgWidth >= imgHeight ? maxWidth : Convert.ToInt32(Math.Round(imgWidth * maxWidth / imgHeight * 1.0));
int newHeight = imgHeight >= imgWidth ? maxWidth : Convert.ToInt32(Math.Round(imgHeight * maxWidth / imgWidth * 1.0)); System.Drawing.Bitmap newImgPhoto = new System.Drawing.Bitmap(imgPhoto, newWidth, newHeight);
//iphone图片旋转
switch (this.hidOrientation.Value)
{
case "": newImgPhoto.RotateFlip(RotateFlipType.Rotate180FlipNone); break;
case "": newImgPhoto.RotateFlip(RotateFlipType.Rotate90FlipNone); break;
case "": newImgPhoto.RotateFlip(RotateFlipType.Rotate270FlipNone); break;
default: break;
}
newImgPhoto.Save(savePath);
}
else
{
this.fileImg.PostedFile.SaveAs(savePath);
}
this.imgUserIco.Src = "/UploadFiles/HeadIcon/temp/" + this.fileImg.FileName; //更新数据
modUser.HeadIcon = this.imgUserIco.Src;
modUser.LastDate = DateTime.Now;
if (bllUser.Update(modUser))
{
Session["USERModel"] = modUser;
Response.Redirect("PersonalDetials.aspx", false);
}
} }
catch
{
Response.Redirect("ErrorPage.aspx", false);
}
}

参考文献:http://blog.csdn.net/linlzk/article/details/48652635

jquery mobile上传图片完整例子(包含ios图片横向问题处理和C#后台图片压缩)的更多相关文章

  1. jquery mobile 按钮部件(包含图标的使用)

    参考网址:http://api.jquerymobile.com/1.3/button/ 注:按钮的三种写法 <a href="#" class="ui-btn u ...

  2. 自学JQuery Mobile的几个例子

    JQuery Mobile是一个用于构建移动Web应用程序的框架,适用于主流的移动设备(智能手机.平板电脑),该框架利用了HTML5和CSS3技术减少了额外的脚本文件的编写.具体JQuery Mobi ...

  3. .net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可。

    .net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可.

  4. jquery实现上传图片及图片大小验证、图片预览效果代码

    jquery实现上传图片及图片大小验证.图片预览效果代码 jquery实现上传图片及图片大小验证.图片预览效果代码 上传图片验证 */ function submit_upload_picture() ...

  5. JQuery Mobile 图片布局

    JQuery Mobile 图片布局 1.实现效果

  6. jquery mobile图片自适应屏幕

    jquery mobile中如果不给img标签指定宽度的话,无法达到自适应屏幕的效果,特此备注:width:100%;

  7. jquery mobile 表单提交 图片/文件 上传

    jquerymobile 下面 form 表单提交 和普通html没区别,最主要是 <form 要加一个 data-ajax='false' 否则 上传会失败 1  html代码 <!do ...

  8. jQuery Mobile(jqm)button的隐藏和显示,包含a标签,圆角和非圆角button

    在移动互联网时代,HTML5开发越来越收到欢迎. 于是各种HTML5的框架都出来了.因为对于jquery的熟悉,jquery mobile 为多数人选择学习的对象.我也是众多追求者之中的一个.近期一直 ...

  9. iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

    一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...

随机推荐

  1. EJB 简介

    EJB: 被称为java企业bean,服务器端组件,核心应用是部署分布式应用程序.用它部署的系统不限定平台.实际上ejb是一种产品,描述了应用组件要解决的标准 标准:   可扩展 (Scalable) ...

  2. 开发微信小程序 中遇到的坑 及解决方法

    1.wx.request 只能访问 https 解决: 新建项目  不填appid  即可访问 localhost 2.页面中多重三元表达式  解析有问题 解决: <!--{{index}} { ...

  3. Python之路 day2 集合的基本操作

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa ''' #集合是无序的 集合的关系测试, 增加,删除,查找等操作 ''' #列表去重 ...

  4. 【javascript】作用域和闭包浅析

    作用域 分全局作用域和局部作用域 全局作用域:函数外部定义的变量,可以被整个program的各成员参照利用. 局部作用域:函数内部定义的变量,仅供该函数的各成员参照利用. var val=1; //全 ...

  5. JS学习之事件流

    本文是原创文章,如需转载,请注明文章出处 JS和AS师出同源,所以事件流的3个阶段也跟AS一样,分别是捕获阶段,目标阶段,冒泡阶段. 下面写了个例子可以清晰的看出事件流的顺序: eventTest.h ...

  6. hive配置以及在启动过程中出现的问题

    一.hive配置 1.安装环境 在hadoop-1.2.1集群上安装hive-1.2.1 2.将hive-1.2.1环境变量添加到PATH路径下 使用如下命令打开配置文件 nano /etc/prof ...

  7. autoloader

    自动加载 $loader = new Zend_Application_Module_Autoloader(array(     'namespace' => 'Blog',     'base ...

  8. 分枝定界的matlab实现

    function [optSolution,optValue,exists]=BranchBound(c,A,b) % 分支定界法 % 整数规划问题标准型 % min c'*x % s.t. % A* ...

  9. Python 对不均衡数据进行Over sample(重抽样)

    需要重采样的数据文件(Libsvm format),如heart_scale +1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.4 ...

  10. 用PHP解析类JSON字符串为数组的实现

    题目:把字符串嵌套关系转换成数组,字符串只包含成对中括号.数字和逗号字符串:(1,(1,2,(1,(1,2,(1)),3)),3,(1,(1,2,((1((1,(1,2,(1,2,3),4,5),3) ...