调用手机摄像头并上传图片--jquery ajax
1、图片框样式与进度条样式
.alert_img_content { width: 44%; float: left; margin: 3%; border: 1px solid #ddd; background: url(/Content/images/jiahao.png) no-repeat 50%; position: relative; box-sizing: border-box; }
.alert_img_content input { display: block; height: 100%; width: 100%; opacity: 0; position: absolute; top: 0; left: 0; z-index: 2; }
.alert_img_content img { display: block; height: 100%; width: 100%; position: absolute; top: 0; left: 0; z-index: 1; }
.alert_img_content a { display: block; text-align: right; padding-right: 7px; padding-top: 2px; font-size: 20px; box-sizing: border-box; border-bottom-left-radius: 100%; height: 40px; width: 40px; background-color: red; color: #fff; /* line-height: 23px; */ position: absolute; top: 0; right: 0; z-index: 3; }
.clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; }
.progress-bar { background-color: #666; width: 100%; text-align: center; position: relative; height: 20px; line-height: 20px; border-radius: 10px; }
.progress-bar-font { width: 100%; color: #fff; position: absolute; z-index: 3; }
.progress-bar-plan { background-color: red; position: absolute; height: 20px; width: 0%; border-radius: 10px; transition: 0.3s; }
2、图片标签
<div class="alert_img_box clearfix">
<div class="alert_img_content">
<input type="file" accept="image/*" capture="camera" onchange="inputChange(this)">
<img />
<a style="display: none;" onclick="deletePic(this)">×</a>
</div>
</div>
3、进度条标签
<div class="progress-bar" style="display: none;">
<div class="progress-bar-plan"></div>
<div class="progress-bar-font">
0%
</div>
</div>
4、file绑定的方法
function inputChange(obj)
{
var picList = $(".alert_img_content"); var pic = picList.eq(picList.length - 1); if (pic.find("input").val() != "" && picList.length < 5)
{
$(".alert_img_box").append(html);
calcHeight();
} if ($(obj).val() != "")
{
$(obj).parent().find("a").show();
} //设置显示图片
function getObjectURL(file)
{
var url = null;
if (window.createObjcectURL != undefined)
{
url = window.createOjcectURL(file);
} else if (window.URL != undefined)
{
url = window.URL.createObjectURL(file);
} else if (window.webkitURL != undefined)
{
url = window.webkitURL.createObjectURL(file);
}
return url;
}
var objURL = getObjectURL(obj.files[0]); $(obj).parent().find("img").attr("src", objURL);
}
5、删除代码
function deletePic(obj)
{
var len = $(".alert_img_content").length;
var pic = $(".alert_img_content").eq(len - 1); $(obj).parent().remove(); if (len == 5 && pic.find("input").val() != "")
{
$(".alert_img_box").append(html);
calcHeight();
}
}
6、保持图片框为正方形的代码
function calcHeight()
{
var obj = $(".alert_img_box .alert_img_content"); obj.height(obj.width());
}
7、上传的js代码
function saveDealinfo()
{
$("#btn_save").click(function ()
{
var formData = new FormData(); if ($("input[type='file']").length > 1)
{
$(".progress-bar").show();
$(".progress-bar-plan").css("background-color", "red"); $("input[type='file']").each(function (index, item)
{
formData.append("file", $("input[type='file']")[index].files[0]);
})
} formData.append("alarmID", "@Model.Item1.AlarmID");
formData.append("remark", $("textarea[name=remark]").val());
formData.append("alarmStatus", $("input[name=alarmDealStatus]:checked").val())
formData.append("alarmConfirm", $("input[name=alarmConfim]:checked").val()) //首先封装一个方法 传入一个监听函数 返回一个绑定了监听函数的XMLHttpRequest对象
var xhrOnProgress = function (fun)
{
xhrOnProgress.onprogress = fun; //绑定监听
//使用闭包实现监听绑
return function ()
{
//通过$.ajaxSettings.xhr();获得XMLHttpRequest对象
var xhr = $.ajaxSettings.xhr();
//判断监听函数是否为函数
if (typeof xhrOnProgress.onprogress !== 'function')
return xhr;
//如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去
if (xhrOnProgress.onprogress && xhr.upload)
{
xhr.upload.onprogress = xhrOnProgress.onprogress;
}
return xhr;
}
} $.ajax({
url: "/Interface/DealAlarm",
type: 'POST',
data: formData,
// 告诉jQuery不要去处理发送的数据
processData: false,
// 告诉jQuery不要去设置Content-Type请求头
contentType: false,
//beforeSend: function ()
//{
// console.log("正在进行,请稍候");
//},
xhr: xhrOnProgress(function (evt)
{
var percent = Math.floor(evt.loaded / evt.total * 100);//计算百分比 $(".progress-bar-plan").css("width", percent + "%");
$(".progress-bar-font").html(percent + '%'); if (percent == 100)
{
$(".progress-bar-plan").css("background-color", "#0bae27");
}
////console.log(percent);
//// 设置进度条样式
//$('#jdt').css('width',percent * 3 + 'px');
//$('#jdt').css('background','skyblue');
////显示进度百分比
//$('#jdt').text(percent+'%');
//$('#loaded').text(evt.loaded/1024 + 'K');
//$('#total').text(evt.total/1024 + 'K');
}),
success: function (response)
{
if (response.Code == 0)
{ }
else
{
}
},
error: function (responseStr)
{
console.log("error");
}
});
})
}
8、mvc的接收代码
public string DealAlarm()
{
ResponseResult<string> response = new ResponseResult<string>(); long alarmID = Convert.ToInt64(Request["alarmID"]);
string remark = Convert.ToString(Request["remark"]);
int alarmStatus = Convert.ToInt32(Request["alarmStatus"]);
int alarmConfirm = Convert.ToInt32(Request["alarmConfirm"]); List<string> urlList = new List<string>(); IResult iRst = SaveImage(urlList);
return string.empty;
}
8、图片保存代码
public IResult SaveImage(List<string> urlList)
{
try
{
HttpFileCollectionBase coll = Request.Files;
HttpPostedFileBase file;
string domain = "//" + Request.Url.Host + (Request.Url.Port == ? "" : ":" + Request.Url.Port.ToString()) + "/Content/"; for (int i = ; i < coll.Count; i++)
{
file = coll[i]; if (string.IsNullOrEmpty(file.FileName))
{
continue;
} if (file.ContentLength == )
{
continue;
} string pictureName = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string extension = Path.GetExtension(file.FileName);
string folder = DateTime.Now.ToString("yyyyMM"); string path = PhotoUrl + "Upload\\" + folder + @"\" + pictureName + extension; if (!Directory.Exists(PhotoUrl + folder))
{
Directory.CreateDirectory(PhotoUrl + "Upload\\" + folder);
} file.SaveAs(path); urlList.Add(domain + folder + @"/" + pictureName + extension);
} return IResult.Success;
}
catch (Exception ex)
{
Logging.Logger.Error(ex);
return IResult.UnknownErr;
}
}
调用手机摄像头并上传图片--jquery ajax的更多相关文章
- html5调用手机摄像头,实现拍照上传功能
今天做手机网站,想实现手机扫描二维码功能.首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析. 首先实现在浏览器中调用摄像头,当然用现在 ...
- 利用html5调用本地摄像头拍照上传图片[转]
利用html5调用本地摄像头拍照上传图片 html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头, ...
- 怎样让HTML5调用手机摄像头拍照——实践就是一切
原文:怎样让HTML5调用手机摄像头拍照--实践就是一切 NanShan 小编将思路提供给了大家.学编程最重要的是实践,我这尽管有完好的代码,可是希望大家都能够自己写出属于自己的代码 HTML5 Th ...
- HTML5调用手机摄像头,仅仅支持OPPOHD浏览器
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 亲测可用)html5 file调用手机摄像头
在切图网一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api 然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 in ...
- 使用HTML5+调用手机摄像头和相册
前言:前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法简 ...
- js 调用手机摄像头或相册并展示图片
效果图 手机浏览器.微信打开该网页,都支持调用摄像头拍照和打开相册. 先看最终结果: 每次点击“点击上传”,可以选择相册或者拍照,选完以后可以多展示一张图片,同时上传服务器. 点击“重新上传”,清空所 ...
- 利用html5调用本地摄像头拍照上传图片
这个是前台HTML的代码. <div id="contentHolder"> <video id="video" width="32 ...
- Android调用手机摄像头使用MediaRecorder录像并播放
最近在项目开发中需要调用系统的摄像头录像并播放. 在开发中遇到了两个问题,记录下: (1)开发过程中出现摄像头占用,启动失败,报错.但是我已经在onDestory()中关闭了资源. 报错原因:打开程序 ...
随机推荐
- djiango 配置文件(setings)
""" Django settings for ORM project. Generated by 'django-admin startproject' using D ...
- 蓝桥杯2015年省赛C/C++大学B组
1. 奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其 ...
- 深入理解JVM(学习过程)
这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. 2020年02月06日22:43:0 ...
- 突破CRUD | 万能树工具类封装
0.学完本文你或许可以收获 感受一个树工具从初始逐步优化完善的过程 树工具封装的设计思考与实现思路 最后收获一款拿来即用的树工具源代码 对于前端树组件有一定了解和使用过的同学可直接跳跃到第3章节开始. ...
- 再次小结windows服务的编写
2013-03-23 21:05 (分类:计算机程序) 其实很简单 void mian() { //服务的分派表 SERVICE_TABLE_ENTRY DispatchTable[] ={ ...
- TChart-图表的滚动与翻译
界面代码: object Form1: TForm1 Left = Top = Width = Height = Caption = 'Form1' Color = clBtnFace Font.Ch ...
- jQuery 源码解析(三十一) 动画模块 便捷动画详解
jquery在$.animate()这个接口上又封装了几个API,用于进行匹配元素的便捷动画,如下: $(selector).show(speed,easing,callback) ;如 ...
- SAP 如何看某个TR是否传入了Q或者P系统?
SAP 如何看某个TR是否传入了Q或者P系统? 两种方式可以查询. 1)进入Q系统或者P系统.SE16,看表TPALOG, 输入请求号码, 执行,看记录里的字段TPSTAT_KEY是否为空,如果不为空 ...
- Spring Boot从入门到精通(一)搭建第一个Spring Boot程序
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- CentOS7 GlusterFS文件系统部署
一.GlusterFS简介 GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点 ...