MUI+AJAX+Spring MVC 实现照片拍摄和本地相册选取上传

MUI 实现手机图片上传 由于公司自主研发APP,使用的是MUI框架。我做了其中头像图片上传的功能,在此分享下demo; 如有不规范处,请多多指教,互相学习。 第一次接触这个框架,踩了许多的坑 >_< 步骤:点击选择图片 → 图片转BASE64发送到服务器 → 服务器解码写入流中,返回地址 1.选择图片 2.后台服务器解码 3.上传完成 D:\ tu ... 阅读详情

(1)首先贴上的是JS代码

*拍照上传*/

function getImage() {

var camera = plus.camera.getCamera();
//生成时间戳
var timestamp = Date.parse(new Date());
camera.captureImage(function(e) {
plus.io.resolveLocalFileSystemURL(e,function(entry){
console.log('获取图片地址');
var imgUrl = entry.toLocalURL();
console.log("imgURL  "+imgUrl);
/*调用上传图片方法*/
uploadHead(imgUrl);
},function(e){
console.log("读取拍照文件错误:" + e.message);
mui.alert("读取拍照文件错误");
},function(e){
console.log("调用摄像头异常:" + e.message);
mui.alert("调用摄像头异常");
},{
filename: timestamp+"-img.png"
});
});

}

 

/*本地相册上传*/
function galleryImg() {
console.log("打开相册");
//生成时间戳
var timestamp = Date.parse(new Date());
plus.gallery.pick(function(img) {
console.log("选取图片相册");
plus.io.resolveLocalFileSystemURL(img,function(entry){
console.log("获取图片地址");
var imgUrl = entry.toLocalURL();
/*调用上传图片方法*/
uploadHead(imgUrl);
},function(e){
console.log("读取图片错误:" + e.message);
mui.alert("读取图片错误");
},function(e){
console.log("选取图片异常:" + e.message);
mui.alert("选取图片异常");
},{
filename: timestamp+"-img.png"
});


});

};

//上传图片
function uploadHead(imgPath) {
console.log("imgPath = " + imgPath);
// mainImage.src = imgPath;
// mainImage.style.width = "60px";
// mainImage.style.height = "60px";


var image = new Image();
image.src = imgPath;
image.onload = function() {
var imgData = getBase64Image(image);
console.log("imgData"+imgData);
/*在这里调用上传接口*/
$.ajax({
url:baseURL+“/imgeupload”,
data:{
"imgBase64Data":imgData
},
dataType: 'json',
type: 'post',
timeout: 10000,
success: function(data) {
console.log('上传成功');
},
error: function(xhr, type, errorThrown) {
console.log(errorThrown);
mui.toast('网络异常,请稍后再试!');
}
});
}
}

//将图片压缩转成base64
function getBase64Image(img) {
//绘制图形
var canvas = document.createElement("canvas");
var width = img.width;
console.log(width);
var height = img.height;
console.log(height);
// 这里对图片大于300*400的进行压缩
if(width > height) {
if(width > 300) {
height = Math.round(height *= 300 / width);
width = 300;
}
} else {
if(height > 400) {
width = Math.round(width *= 400 / height);
height = 400;
}
}
canvas.width = width; /*设置新的图片的宽度*/
canvas.height = height; /*设置新的图片的长度*/
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height); /*绘图*/
var dataURL = canvas.toDataURL("image/png", 0.5);
console.log(dataURL);
return dataURL.replace("data:image/png;base64,", "");
}

(2)后台处理代码

@ResponseBody
@RequestMapping( value = "/img_upload")
public WrapperResponseEntity imgUpload(@RequestParam String imgBase64Data, HttpServletRequest request){
    WrapperResponseEntity entity = new WrapperResponseEntity();
    try {

        if(imgBase64Data == null || "".equals(imgBase64Data)){
                entity.setData("上传失败,上传图片数据为空!");
        }
       String projectPath = request.getSession().getServletContext().getRealPath("/");
        String context = request.getContextPath();
        String imgFilePath ="/userfiles/images/";
        File uploadPathFile = new File(projectPath+imgFilePath);

        //创建父类文件
        if(!uploadPathFile.exists() && !uploadPathFile.isDirectory()){
            uploadPathFile.mkdirs();
        }
        File imgeFile = new File(projectPath+imgFilePath,new Date().getTime()+".jpg");
        if(!imgeFile.exists()){
            imgeFile.createNewFile();
        }

        //对base64进行解码
        byte[] result = Encodes.decodeBase64(imgBase64Data);
        //使用Apache提供的工具类将图片写到指定路径下
        FileUtils.writeByteArrayToFile(imgeFile,result);
        entity.setData(imgFilePath+imgeFile.getName());
        System.out.println(imgFilePath+imgeFile.getName());
    }catch (Exception e){
        e.printStackTrace();
        entity.setData("上传失败,系统异常");
    }
    return entity;
}

/**
 * Base64解码.
 */
public static byte[] decodeBase64(String input) {
   return Base64.decodeBase64(input.getBytes());
}

说明:这里只能实现单张图片的上传。

 

MUI APP中实现图片上传 前端页面编写<div class="mui-input-row"> <label>上传图片</label> <div class="mui-button-row"> <button type="button" id="gallery" class="mui-btn mui-btn-primary" onclick="return f... 阅读详情

相关推荐

MUI调用照片以及裁剪和图库照片上传到服务器【MUI前端部分】

使用mui的长按事件 我把我的复制元素 class 设置为copy-text,每次触发事件就会使用 innerText 获取纯文本,加了一个确认框 让用户选择是否复制,判断是安卓还是ios。其中调用这个函数的时候path为当前的上传发图片在本机的图片的URL:对其进行一个保存之后,在前端进行一个覆盖图层,启用几个功能按钮。使用AJAX,将imageBase64文件流传递给我的后端,进行一个图片处理,和相关的API调用。1.首先,把mui的css和js引入到我的页面中:(准备工作)

一键难忘的博客 1547

移动端开发框架mui之ajax封装(含文件上传)

MUI 官网:https://www.dcloud.io/mui.html MUI 文档:https://dev.dcloud.net.cn/mui/ui/ 演示地址:https://dcloud.io/hellomui/ (支持手机和电脑浏览器) 开发工具:https://www.dcloud.io/hbuilderx.html (Hbuilder X) 查看 MUI 文档,可以看到 MUI 框架已经对 ajax 请求做了封装处理,方便我们使用。具体使用方式与 jQuery 中封装的ajax.

zgphacker2010的专栏 2547

HBuilder+HTML5 Plus+MUI实现拍照或者相册选择图片上传

利用HTML5 Plus的Camera、Gallery、IO、Storage和Uploader来实现手机APP拍照或者从相册选择图片上传。Camera模块管理设备的摄像头,可用于拍照、摄像操作,通过plus.camera获取摄像头管理对象。Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文件到相册等功能。通过plus.gallery获取相册管理对象。IO模块管理本地文件系统,用于对文件系统的目录浏览、文件的读取、文件的写入等操作。通过plus.io可获取文件系统管理对象。Storage模块管理应用本地数据存储区,用于应用数据的保存和读取。应用本地数据与localStorage、sessionStorage的区别在于数据有效域不同,前者可在应用内跨域操作,数据存储期是持久化的,并且没有容量限制。通过plus.storage可获取应用本地数据管理对象。Uploader模块管理网络上传任务,用于从本地上传各种文件到服务器,并支持跨域访问操作。通过plus.uploader可获取上传管理对象。Uploader上传使用HTTP的POST方式提交数据,数据格式符合Multipart/form-data规范,即rfc1867(Form-based File Upload in HTML)协议。 --------------------- 作者:A_山水子农 来源:优快云 原文:https://blog.csdn.net/qq_27626333/article/details/51896616 版权声明:本文为博主原创文章,转载请附上博文链接!

mui中使用ajax实现登录功能

mui封装了常用的Ajax函数,支持GET、POST请求方式,在mui.ajax方法基础上,mui 进一步简化出最常用的mui.get、mui.getJSON、mui.post三个方法。使用mui搭建登录界面,使用ajax来向后端发送请求实现登录效果。框架,建立mobile文件夹,用来实现和mui前端交互。:完成一些格式验证的功能。

~~~ 1973

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】

一直都是报 【ECharts Unknown series wordCloud】这玩意可能要刷脸,祝你好运吧~

Sky_Bug的博客 2418

mui.ajax

部分参数介绍:1、dataTypedataType为服务器返回过来的数据的格式。支持返回的类型有:"json",返回json格式的数据;"xml",返回xml文档;"html",返回纯文本HTML信息;"script", 返回纯文本JavaScript代码;"text", 返回纯文本字符串;主要用于post请求,一般都是放在请求头中,这样服务端就可以根据请求头中的字段来获取消息主体的编码方式,进而进行解析数据。支持的类型有:(1)

xxxxxxxr的博客 1601

【数据挖掘】遗传算法原理浅析:什么是遗传算法?遗传算法的工作原理是什么?

遗传算法(Genetic Algorithm,GA),是进化算法的框架和核心。 各种进化算法有什么异同? - 及时物语的回答 - 知乎 https://www.zhihu.com/question/39152390/answer/901070749

纸羊同学的博客 4271

mui图片上传

作为一个后台开发人员、写这个真的是浪费不少脑细胞,虽然做出来了,但是也很麻烦,如果哪位大哥或者小妹妹那里有简单点的,我跪求! 相关的js 和 css 网盘地址: 链接:https://pan.baidu.com/s/1v-CNj0HiNoUOgF7gL8pMFg 提取码:w3em 首先展示一下效果图: 点击那个加号(注:这个 + (加号)是图标不是图片,不会弄的找前端的给弄)会...

0.2°C 5366

储能变流器(Power Control System——PCS)设计原理

储能变流器(Power Control System——PCS)可控制蓄电池的充电和放电过程,进行交直流的变换,在无电网情况下可以直接为交流负荷供电。PCS 由 DC/AC 双向变流器、控制单元等构成。PCS 控制器通过通讯接收后台控制指令,根据功率指令的符号及大小控制变流器对电池进行充电或放电,实现对电网有功功率及无功功率的调节。 PCS 控制器通过 CAN 接口与 BMS 通讯,获取电池组状态信息,可实现对电池的保护性充放电,确保电池运行安全。   储能变流器(PCS)可控制蓄电池的充电和放电过程,进

Zhouengineer的博客 5万+

SQL2000在Win10上安装完整指南:兼容模式、SP4补丁与远程连接配置

数据库兼容性是老系统迁移与运维中绕不开的难题。当历史遗留的SQL Server 2000遭遇全新的Windows 10环境,安装程序常因系统版本检测失败而拒绝运行,这背后是旧版安装程序与NT内核版本间的识别错位。通过兼容模式模拟旧系统环境、以管理员身份运行安装程序,并处理注册表挂起与杀毒软件干扰,即可突破基础安装障碍。安装后的SP4补丁与TCP/IP端口配置,则是保障服务稳定与远程连接的关键。这一技术路径广泛适用于制造企业MES、进销存系统及医院HIS等仍依赖老旧数据库的场景,为IT运维与数据迁移测试提供了

weixin_29266679的博客 437

MUI+AJAX+Spring MVC 实现照片拍摄和本地相册选取上传

http://blog.csdn.net/backzero333/article/details/58744798 (1)首先贴上的是JS代码 *拍照上传*/ function getImage() { var camera = plus.camera.getCamera(); //生成时间戳   var timestamp = Date.parse(new Date

haiyang4988的博客 1339

从PLC到机械臂:揭秘工业自动化中的信号交互与控制逻辑

本文深入解析了PLC与机械臂在工业自动化中的信号交互与控制逻辑,详细介绍了硬件连接方案、通信机制及控制逻辑设计。通过西门子PLC与六轴机械臂的实战案例,展示了从信号采集到动作执行的完整流程,并探讨了高级控制策略与行业应用前景,为工程师提供了一套完整的实践框架。

weixin_29304985的博客 388

mui ajax方法详解

mui ajax方法详解: mui提供了mui.ajax,在此基础上有分装出mui.get()/mui.getJSON()/mui.post()三个方法。 mui.ajax( url [,settings] ) mui.ajax( url [,settings] ) url Type: String 请求发送的目标地址 settings Type: PlainObject key/valu...

weixin_33798152的博客 994

SmartFusion从FPGA到ARM(八)——CoreUARTapb的使用

文章目录1.CoreUARTapb简介2.添加CoreAPB3总线IP核3.添加CoreUARTapb4.驱动代码实现5.库函数简介6.串口printf函数实现7.串口接收轮询和中断方式 系列教程:SmartFusion从FPGA到ARM系列教程 1.CoreUARTapb简介 对于SmartFusion2来说,MSS_UART的管脚可以任意分配,但是对于SmartFusion来说,MSS_UART的管脚是固定的不能分配: 109-UART0_RX 110-UART0_TX 111-UART1_RXD 11

whik1194的博客 2442

嵌入式开发环境Vscode开发STM32单片机程序

STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc +开发单片机程序的经验。(这里不解释 gcc 是什么)。

嵌入式技术开发 1843

MUI Ajax

mui框架基于htm5plus的XMLHttpRequest,封装了常用的Ajax函数,支持GET、POST请求方式 支持返回json、xml、html、text、script数据类型 mui提供了mui.ajax方法,并在mui.ajax方法基础上,进一步简化出最常用的mui.get()、mui.getJSON()、mui.post()三个方法 mui.ajax(u...

秋城落叶的博客 1771

从 CDS 接口到 ABAP 运行时,深入理解 SAP RAP Custom Entity

CDS Custom Entity 是一种非 SQL、瞬态的 CDS 实体,不依赖 HANA SQL 读取数据,而是通过 ABAP 类实现查询逻辑(如 RFC、OData、BAPI 等)。它在 CDS 层定义数据契约(字段、键、关联、注解),由 @ObjectModel.query.implementedBy 指向实现 IF_RAP_QUERY_PROVIDER~SELECT 的类,真正执行数据获取。适用于无法用 SQL 表达的数据源,如远程系统或 API。其核心是“接口 + 实现”模式,运行时由 RAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 170

mui拍照、相册选择以及上传图片(前后端代码)

mui拍照、相册选择以及上传图片(前后端代码) 小付在此多嘴一句,这是本人的发表的第一份博客,很期待很激动,我本是java出身,但是,由于公司需要,app,公众号都了解一二,不敢奢求过多,只希望我的分享能给大家解决一点思路,这次mui的图片上传、预览等功能希望能给大家带来一定的帮助。 mui.plusReady(function() { function tellphone(imgob...

weixin_43098742的博客 2257

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MUI上传图片之选择相册和相机上传

1.因为项目中有三处地方需要上传,所以html中存在三处地方。身份证正反面为上传一张,发票限制上传9张。 <div class="action1"> <!--展示图片页面--> <button id="InputFile" class="InputFile image-item cardpica"></button> ...

weixin_34248705的博客 639

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mui发送图片实现方法

1.单张图片上传: <!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-...

weixin_45932157的博客 530

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

mui ajax 文件上传,MUI的图片上传和压缩

MUI的上传图片目前知道有两种方式,一种见前面文章中关于图片裁切时使用的base64作为字符串上传,另外一种则是本篇章中所使用的plus.uploader方式,它是一种真正意义上的文件上传,我们可以使用commons- fileupload组件来实现一个文件上传的后台,使用plus.uploader选择相册图片进行提交上传,详细如下文。本文章实现的特点:(1)、基于Java的服务端文件上传,可同时...

weixin_39779537的博客 1725

mui上传图片

function plusReady(){                   // 弹出系统选择按钮框                   mui("body").on("tap","#cs1",function(){                       page.imgUp();                   })                           

wanghongpu9305的博客 1485
上一篇: Java Bean 创建实体类 返回为null问题
下一篇: 分布式应用中的多数据源配置目的
慕久安
博客等级 码龄10年 18粉丝 24原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值