使用localResizeIMG3+WebAPI实现手机端图片上传
惯例~惯例~昨天发表的使用OWIN作为WebAPI的宿主..嗯..有很多人问..是不是缺少了什么 - - 好吧,如果你要把OWIN寄宿在其他的地方...代码如下:
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
string baseAddress = "http://localhost:9000/"; // 管道地址
//开启管道监听
WebApp.Start<Startup>(url: baseAddress);
Console.WriteLine("开启成功!");
// Create HttpCient and make a request to api/values
////创建HTTP客户
//HttpClient client = new HttpClient();
//var response = client.GetAsync(baseAddress + "api/values").Result;
//Console.WriteLine(response);
//Console.WriteLine(response.Content.ReadAsStringAsync().Result); Console.ReadLine();
}
}
}
闲话不多说~让我们开始今天的内容,!
写过上传图片的都知道,在HTML5没出来以前,我们做上传图片预览,必须要先上传到服务器,然后在由服务器来反馈给客户端预览,这样..既不科学也会占用大量的服务器资源.
在BS迅速发展的今天,是时候来改变了..(咳咳,装下B..)
今天我们主要的内容是使用HTML5实现本地预览图片,然后在使用localResizeIMG3+AJAX的形式把图片传到我们昨天的WebAPI~然后存在服务器.
介绍一下localResizeIMG3 嗯..这是一个开源框架..主要目的是:没有蛀牙!!(咳咳,串戏了..),呃,是通过JS把图片压缩(可设置压缩率)成base64字符串 使其可以通过AJAX参数的形式直接上传.
localResizeIMG3 的开源地址:https://github.com/think2011/localResizeIMG3/releases
AJAX..WebAPI..需要我多说么? - -,
下面我们来看实现效果:
说明:我这里的压缩率设置为0.1..你们懂的..(好吧,不懂的话..其实就是我也说了手机端嘛,节省流量,~图片质量还行吧..)
首先我们来看看WebAPI的实现代码~我的风格..你们懂的..不解释太多,都在注释里了..
[HttpPost]
public List<string> DoSaveImages([FromBody]JObject imgJObject)
{
List<string> list = new List<string>();
for (int i = ; i < ; i++)
{
string img = "img" + i;
if (imgJObject.Value<JObject>(img).Value<int>("size") > )
{
//获取base64位数据流
var base64 = imgJObject.Value<JObject>(img).Value<string>("base64");
Regex reg = new Regex("data:image/(.*);base64,");
//正则替换
base64 = reg.Replace(base64, "");
//转换为byte数组
byte[] arr = Convert.FromBase64String(base64);
//转换为内存流
var ms = new MemoryStream(arr);
//转换为bitmap图片对象
var bmp = new Bitmap(ms);
//生成图片名称
string dizhi = DateTime.Now.ToString("yyyyMMddHHmmssffff");
var path = GetMapPath("~/Upimages/") + dizhi + ".jpg";
//存入服务器
bmp.Save(path);
string website = "http://" + HttpContext.Current.Request.Url.Authority;
list.Add(website + "/Upimages/" + dizhi + ".jpg"); }
}
return list; }
下面我们来看看前端JS的代码~(重点~)
首先我们来看看HTML5直接客户端预览图片的代码:
// 选择图片,读取地址预览的辅助函数
//采用HTML5 FileReader接口 兼容IE9以上..
function readURL(input, tmpimg) { if (input.files && input.files[0]) {
var reader = new FileReader();
//注册onload事件
reader.onload = function (e) {
if (!/image/.test(e.target.result)) {
alert('请上传图片格式...');
return false;
}
tmpimg.attr('src', e.target.result);
}
//读取文件成为二进制流
reader.readAsDataURL(input.files[0]);
}
}
好了,下面我们来看看关键的 上传图片的代码:
//定义多图存储数组
var img_data = { img1: {
base64: "",
size: 0
},
img2: {
base64: "",
size: 0
},
img3: {
base64: "",
size: 0
}
}
$(function () {
$(".choseimg input").change(function () {
var $me = $(this);
var index = $(this).attr("img");
var $img = $me.parent().find('img');
readURL(this, $img);
//使用LEZ转换图片
lrz(this.files[0], {
quality: 0.1, //设置压缩率
done: function (results) {
img_data[index].base64 = results.base64;
img_data[index].size = results.base64Len; }
});
});
})
//确定上传
function Submit() {
$.ajax({
cache: true,
type: "POST",
url: 'api/Values/DoSaveImages',
data: JSON.stringify(img_data)
,
contentType: 'application/json',
async: true,
error: function (request) {
alert("出现异常,请联系客服");
},
success: function (data) {
for (var i = 0; i < data.length; i++) {
$("#upimage").append(' <img src="' + data[i] + '" />');
}
}
});
}
这样,我们就完成使用localResizeIMG3+WebAPI实现手机端图片上传的全部功能~
我这里是多图上传所以定义了数组,大家可以根据需求对数据进行处理~
使用localResizeIMG3+WebAPI实现手机端图片上传的更多相关文章
- HTML5手机端拍照上传
1.accept="image/*" capture="camera" 自动调用手机端拍照功能 accept="image/*" captu ...
- megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题
最近在弄微信端的公众号.订阅号的相关功能,发现原本网页上用的uploadify图片上传功能到手机端有的手机类型上就不能用了,比如iphone,至于为啥我想应该不用多说了吧(uploadify使用fla ...
- 手机端 H5上传头像
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 手机端图像编辑上传-cropper
编辑头像,实现相册,照像功能,并能缩放裁剪功能,可自定义UI,引用'cropper.js', 'exif.js' /*初始化裁剪插件*/ var screenWidth = $(window).wid ...
- aps.net mvc webapi 实现文件或图片上传
前几天看到网上有很多复杂的实现方式,觉得没必要,所以就写个简单的实现. 一:首先来看看Api Controller里面的代码: HttpContext.Current.Request.Files 这 ...
- 关于移动手机端富文本编辑器qeditor图片上传改造
日前项目需要在移动端增加富文本编辑,上网找了下,大多数都是针对pc版的,不太兼容手机,当然由于手机屏幕小等原因也限制富文本编辑器的众多强大功能,所以要找的编辑器功能必须是精简的. 找了好久,发现qed ...
- MVC 手机端页面 使用标签file 图片上传到后台处理
最近刚做了一个头像上传的功能,使用的是H5 的界面,为了这个功能搞了半天的时间,找了各种插件,有很多自己都不知道怎么使用,后来只是使用了一个标签就搞定了:如果对样式没有太大的要求我感觉使用这个就足够了 ...
- IOS5开发-http get/post调用mvc4 webapi互操作(图片上传)[转]
IOS5开发-http get/post调用mvc4 webapi互操作(图片上传) 目前最流行的跨平台交互是采用http协议通过JSON对象进行互操作.这种方式最简单,也很高效.webservi ...
- kindeditor修改图片上传路径-使用webapi上传图片到图片服务器
kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 在这里我着重介绍一些使用kindeditor修改图片上传路径并通过webapi上传图片到图片服务器的方案. 因为我使用的 ...
随机推荐
- 从零开始编写自己的C#框架(27)——什么是开发框架
前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...
- so 问题来了,你现在值多少钱?
年底了一大帮人都写着年底总结,总结一年做过的事.错过的事和做错的事.增长了多少本事,找没找到女朋友……来年做好升职加薪,要么做跳槽的准备,程序猿又开始浮躁了……. so 问题来了,你现在值多少钱? 这 ...
- C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- oracle 误删数据恢复
1.根据时间点查系统版本号scn: select timestamp_to_scn(to_timestamp('2013-01-07 11:20:00','YYYY-MM-DD HH:MI:SS')) ...
- Oracle 11g必须开启的服务及服务详细介绍
转自:http://www.educity.cn/shujuku/404120.html 成功安装Oracle 11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现非常卡的状况,通 ...
- 物联网实验4 alljoyn物联网实验之手机局域网控制设备
AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...
- Android,通用ListAdapter
优点 不需要每个列表都建立Adapter. 使用效果 Item点击事件使用的是自写的事件机制. mListAdapter = new BaseListAdapter<PromotionsMode ...
- C# BS消息推送 SignalR介绍(一)
1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 介绍 1)SignalR能用来持久客户端与服务端的连接,让我们便于开发一些实时的应用,例如聊天室在 ...
- java中判断list是否为空的用法
1.如果想判断list是否为空,可以这么判断: if(null == list || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmp ...