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

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

本文章实现的特点:

(1)、基于Java的服务端文件上传,可同时上传多个文件,支出文件进度信息(第几个文件,百分比)等;

(2)、MUI实现的文件上传前端,同时支持Android和IOS不同平台;

(3)、可以选择上传原图或压缩大小的图片,同样支持不同平台;

(4)、一些其他MUI的API,如:alert、ajax、gallery等;

服务端代码参考为:

@Override

protected voiddoGet(HttpServletRequest request,

HttpServletResponse response)throwsServletException, IOException {

log.info("######"+ CommonUtils.getClientIpAddress(request) +"访问文件上传######");

/*response.setHeader("Access-Control-Allow-Credentials", "false");

response.setHeader("Access-Control-Allow-Origin", "*");

response.setHeader("Access-Control-Allow-Methods", "*");

response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");*/

booleanisMultipart = ServletFileUpload.isMultipartContent(request);

if(!isMultipart) {

log.info("######不是文件上传的二进制表单提交######");

outputJSON(response,this.resultUpload(EnumResult.ERROR.getKey() ,"不是文件上传的二进制表单提交",null));

return;

}

DiskFileItemFactory factory =newDiskFileItemFactory();

ServletContext servletContext =this.getServletConfig().getServletContext();

File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");

factory.setRepository(repository);

ServletFileUpload upload =newServletFileUpload(factory);

upload.setHeaderEncoding("utf-8");//上传文件乱码

upload.setSizeMax(1024*1024*50);//最大允许上传50M

//定义图片集合

List fileList =newArrayList();

List resultList = uploadFile(request, upload , fileList);

if(CollectionUtils.isNotEmpty(resultList)){

StringBuilder builder =newStringBuilder();//上传失败

for(String text : resultList) {

builder.append(text).append('\n');

}

System.out.println(builder.toString());

CommonUtils.outputJSON(response, builder.toString());

}

//文件上传成功

outputJSON(response,this.resultUpload(EnumResult.SUCCESS.getKey() ,"上传成功!", fileList));

log.info("######文件上传处理完毕######");

}

private voidoutputJSON(HttpServletResponse response, Map resultUpload) {

String result = JSONObject.toJSONString(resultUpload);

System.out.println(result);

CommonUtils.outputJSON(response, result);

}

privateList uploadFile(HttpServletRequest request, ServletFileUpload upload , List fileList) {

List fileLists;

String imageServer = PropertiesUtils.getInstance().getProperty(EnumProperties.APPLICATION,"system.fileupload.information");

File imageFolder =newFile(imageServer + File.separator+"appUpload"+ File.separator+ DateUtil.getFormatDate());

if(! imageFolder.exists()){

imageFolder.mkdirs();

}

List resultList =newArrayList();

try{

upload.setProgressListener(newUploadProgressListener());

fileLists = upload.parseRequest(request);

Iterator iter = fileLists.iterator();

intindex = 1;

longrandomName = System.currentTimeMillis();

while(iter.hasNext()) {

FileItem item = iter.next();

if(item.isFormField()){

continue;//不处理普通文本框

}

String name = item.getName();

longsize = item.getSize();

if(StringUtils.isNotEmpty(name) && size != 0) {

File newFile =newFile(imageFolder , randomName +"_"+ (index++) + CommonUtils.getSuffixByText(name,"."));

try{

item.write(newFile);

fileList.add(CommonUtils.convertAbsolute2RealPath(newFile.getAbsolutePath()));

}catch(Exception e) {

log.error("写入文件上传出现错误:", e);

resultList.add("处理上传文件:["+ name +"]失败!");

}

}

}

}catch(FileUploadException e) {

log.error("文件上传出现错误:", e);

resultList.add("上传文件失败!");

}

returnresultList;

功能预览:

1518094578048010142.png.image

运行主页面,选择上传画质,分别有“正常”和“原图”,正常则为plus.zip压缩的默认大小(API里面可以对宽高的指定大小、百分比大小),采用下拉框实现,在Android和IOS上显示的效果也各不相同。

1518094775344041219.png.image

这里选中了3张图片,使用mui中的9宫格布局,点击其中任意一张图片,则定位到此图片使用previewImage进行效果图预览,在预览图片时,根据选中的是压缩图片或原图进行显示,这里显示的图片有时候看到的不是很清晰(过一会就清晰了),提交到后台时画质不会模糊。

1518094998233004444.jpg.image

点击第一张图片预览

1518095056639086936.jpg.image

上传进度和百分比

1518095070513086114.jpg.image

上传完成后显示服务器端返回的图片路径(这里又有服务器端的压缩)

1518095174013066650.jpg.image

假设选择上传原图,这里是服务器上压缩后的图片大小

相关下载:

7e73afc5ed2a8d22a2710e1877e50be2.gif效果预览.gif (完整示例的动画效果图)

7e73afc5ed2a8d22a2710e1877e50be2.gif前台代码.jpg (手抖前的最新代码截图)

7e73afc5ed2a8d22a2710e1877e50be2.gif前端代码.zip (手抖将代码删除了,这份儿代码是基于能找回的最新版本上调整的)

看这里:

因为后端的代码是基于一个框架的,代码中依赖的各种工具类太多,就不一一提供了,需要的请联系我。另外示例中的上传地址可能不知在什么时候就过期了,因为我回头会将其与用户的token绑定的,非授权用户无法再上传,不过这可能是“很长”一段时间以后的事情了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql的搜索效率_Mysql模糊查询like效率,以及更高效的写法

在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效…

服务器winsxs文件夹怎么清理工具,winsxs,教您winsxs文件夹清理方法

小伙伴们,小编今天给你带来了一个非常劲爆的消息,那就是如何清理winsxs文件夹这问题的解决方法,说到这里你们一定都特别的想要知道清理winsxs文件夹到的方法了吧。那么小编今天就把清理winsxs文件夹的方法来分享给你们。最近不少的小伙伴都发…

mysql 事物 锁行 测试_MySQL Transaction--RR事务隔离级别下加锁测试

按照非索引列更新在可重复读的事务隔离级别下,在非索引列上进行更新和删除会对所有数据行进行加锁,阻止其他会话对边进行任何数据的增删改操作。如果更新或删除条件为c34且c3列上没有索引则:1、不允许其他会话插入任意记录,因为所…

修复mysql的view_MYSQL数据损坏修复方法

1、myisamchk使用 myisamchk 必须暂时停止 MySQL 服务器。例如,我们要检修 discuz 数据库。执行以下操作:# service mysql stop (停止 MySQL );# myisamchk -r /数据库文件的绝对路径/*MYI# service mysql startmyisamchk 会自动检查并修复数…

centos7mysql语句创建表格_CentOS7中安装MySQL(简便)及 网站的搭建

一、首先,我们需要配置CentOS7中网络环境的搭建,物理机IP为192.168.100.39,虚拟机IP为192.168.100.139,网络模式设置为桥接模式,再进入系统挂载光盘、输入命令 cd /yum.repos.d 修改yum源配置文件,接下…

mysql系列_Mysql系列(三)—— Mysql字符集和比较规则

一、前言字符集表示的是存储的二进制与字符如何映射的关系,比较规则指的是字符如何排序的规则,比如字符如果使用order by到底按什么规则进行排序。二、查看命令查看支持的字符集命令是:SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式],CHARA…

复数卷积 tensorflow_PyTorch 中的傅里叶卷积

欢迎关注 “小白玩转Python”,发现更多 “有趣”注意: 在这个 Github repo 中提供了1D、2D 和3D Fourier 卷积的完整方法。我还提供了 PyTorch 模块,可以方便地将傅里叶卷积添加到可训练模型中。链接如下:https://github.com/fkodom/fft-conv…

python time智能等待_Python Selenium智能等待

前言在使用python selenium进行自动化测试实践的过程中,经常会遇到元素定位不到,弹出框定位不到等等各种定位不到的情况,在大多数的情况下,无非是以下两种情况:1、有frame存在,定位前,未switch到…

go语言mysql删除记录_MySQL数据库删除操作-Go语言中文社区

删除数据库DROP DATABASE [IF EXISTS] 数据库名;例如:删除school数据库IF EXISTS 为可选,判断是否存在,如果不存在则会抛出异常删除数据表DROP TABLE [IF EXISTS] 表名;例如:删除student表注意:删除具有主外键关系的表…

java中的位移运算符_java中的移位运算符(, , )

java中有3种移位运算符<>> : 右移运算符&#xff0c;不改变符号位&#xff0c;num >> n 表示二进制右移n位&#xff0c;结果相当于 num / (2的n次方)>>> : 无符号右移&#xff0c;长度扩展为4字节&#xff0c;最高位都为0&#xff0c;但正数扩展位补…

现代软件工程系列 软件 = 程序 + 软件工程

软件随想: 软件 程序 软件工程 最近和几个同道谈论了一些程序&#xff0c;架构&#xff0c;软件的问题&#xff0c;大家身在此山中&#xff0c;绕来绕去&#xff0c;始终没有能有明确清晰的结论。我把一些想法写在这里&#xff0c;供专家指正。 几乎所有程序员都知道“程序…

现代软件工程系列 学生和老师都不容易

老师的难处 - V2.0 的困难 有笑话说某人请客, 客人无论是坐轿或是步行前来, 主人都能奉承一番。 有客人说自己是爬着来的&#xff0c; 主人奉承说 - 稳妥之至! 据说有些学校的有些课还是沿用 N 年前的教案和教材, 这当然稳妥之至。我看到学校用很多年前的稳妥教材把学生…

现代软件工程系列 学生的精彩文章 (1)

讲了很多课, 碰到了很多学生, 他们教给我不少东西, 下面是一些我印象中的精彩文章: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!188.entry December 26“大教堂”与“市集” 软件项目的管理者总是无比艳羡传统行业&#xff0c;无论是工业的流水线还是…

jpa mysql存储过程_(原)springbootjpa调用服务器mysql数据库的存储过程方法-Go语言中文社区...

一、springboot jpa项目文件配置#----------------------------------------------------------###########################################################datasource 配置MYSQL数据源&#xff1b;########################################################## 数据库sprin…

现代软件工程系列 学生的精彩文章 (3) 如何在Bug 不断的情况下还能保持平常心...

from: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!222.entry 感想 平常心 初中的数学老师常常和我说&#xff1a;“你要学会保持一颗平常心”。我是一个不那么豁达开朗的人&#xff0c;对很多事情都会很看重&#xff0c;GPA&#xff0c;排名&#x…

现代软件工程系列 学生读后感 梦断代码

from:http://ttcs.spaces.live.com/blog/cns!C3759CC6FCEEBDD7!121.entry?sa147831050November 10梦断代码读后介绍 一&#xff0c;这本书讲了什么&#xff1f;软件是人们自以为最有把握&#xff0c;实则最难掌握的技术。作者罗森伯格对OSAF主持的Chandler项目进行长期调查&am…

java 中violate_Java中的Volatile关键字

Java的volatile关键字用于标记一个Java变量为“在主存中存储”。更确切的说&#xff0c;对volatile变量的读取会从计算机的主存中读取&#xff0c;而不是从CPU缓存中读取&#xff0c;对volatile变量的写入会写入到主存中&#xff0c;而不只是写入到CPU缓存。实际上&#xff0c;…

java 如何发提示_消息提醒-如何实现收到待办给QQ发送提醒?

一、前期准备一台windows服务器(用于运行QQ机器人)下载QQ机器人框架二、QQ机器人配置1、解压前面下载的机器人框架和httpapi2、打开解压后的 小栗子框架.exe3、在用户列表右击选择添加单个4、添加后右击点添加后的账号选择登录选中QQ5、点击应用中心>点击导入插件>选中前…

顶级程序员的心得 - Coders at Work

这篇博客经历了 CSDN 的历次改版后&#xff0c;格式已经坏了&#xff0c; 我重新写了一篇&#xff0c;重排了格式&#xff1a; 顶级程序员的心得 –– Coders at Work_SoftwareTeacher的专栏-CSDN博客顶级程序员的心得 –– Coders at Work我2009年读了 “Coders at Work”, …

敏捷软件开发宣言–Manifesto for Agile Software Development

敏捷开发, 谁不会呀, 不就是 没文档, 出活快, 用户说啥都能改? 下面是一个笑话, 王屋村的大牛说 - 我最近转手接了一个活, 完事能挣四五万, 我拿过图纸一看, 不就是盖一烟囱吗? 我们是敏捷 (Agile) 的团队&#xff0c;要文档作甚? 马上开始干活&#xff01; 都快盖好了&am…