java ajax 更改头像_ajax+node实现头像更改
好久没有更新博客了,这几天在写文件上传的时候遇到了一个新的问题,就是关于ajax实现文件上传的问题
这几天在做一个小的demo,类似于论坛的一个东西,基于jquery+express+mongo的一个小的案例,在做到关于设置个人头像的时候,有这样一个场景,用户可以上传头像,然后上传头像成功后,可以对原图进行剪裁,最后的到剪裁后的图像,更改成用户头像。
其实,这个技术上有很多种解决方案,我的问题不是在于实现这个功能的问题上,功能很好实现关键在于用户体验,功能实现的话,图省事,我可以直接用form表单将用户上传的头像提交到后台,后台先存储图片,然后跳转到例外一个页面,将用户上传的图片进行剪裁,这样做很简单,但是这里有个明显的弊端,就是重新刷新了页面,跳转到另外一个页面了,这样用户体验会很不好,所以我就想能不能异步提交表单。
别说,还真有可以异步提交表单的方法,我之前也听说过,但是一直没有用过,在这里,针对这个场景,两种解决的方法,第一个是formData,第二个是ajaxForm插件,我引用的是第一个解决方法,用formData对象来解决异步提交表单的问题,formData是h5中新增的一个js的对象,兼容主流浏览器(别跟我说IE678,),如果考虑低版本浏览器的话,那么还是考虑表单直接提交吧(体验什么就不要考虑了),或者可以用下ajaxForm(基于jquery插件)。
别说了,说的太累了,直接上代码吧
前台html代码(基于bootstrap的)
File input
上传
上传成功
前台js
$('#upfile_btn').click(function(event) {
var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url: '/upavatar',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false
}).done(function(data) {
if (data.status == '1') {
//成功
$('#cg').fadeIn().fadeOut(4000, function() {
var htmlStr = '建材';
$('.jiancaidiv').append(htmlStr);
$('#element_id').Jcrop();
$('#jiancai').click(function(event) {
// alert(111)
/* Act on the event */
var width = parseInt($(".jcrop-holder div:first").css('width'));
var height = parseInt($(".jcrop-holder div:first").css('height'));
var left = parseInt($(".jcrop-holder div:first").css('left'));
var top = parseInt($(".jcrop-holder div:first").css('top'));
console.log(width + ' ' + ' ' + height + ' ' + left + ' ' + top);
$.ajax({
url: '/docut',
type: 'POST',
dataType: 'json',
data: {
width: width,
height: height,
left: left,
top: top,
},
})
.done(function(data) {
if (data.status == '1') {
alert('修改头像成功');
location.href = '/'
}
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
});
});
} else {
//失败
}
console.log('success');
}).fail(function(res) {});
});
后台node(js代码)
var express = require('./node_modules/express');
var bodyParser = require('body-parser');
var router = require('./route.js');
var session = require('express-session');
var formidable = require("formidable");
var fs = require('fs');
var gm = require('./node_modules/gm')
var db = require('./models/db.js');
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({
extended: false
});
var app = express();
//使用session
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}));
//创建静态服务
app.use(express.static('./public'));
//上传头像部分
app.post('/upavatar', function(req, res) {
var form = new formidable.IncomingForm();
form.uploadDir = "./avatar";
form.parse(req, function(err, fields, files) {
console.log(files);
var oldPath = './' + files.file.path;
var newPath = './avatar/' + req.session.userName + '.jpg';
fs.rename(oldPath, newPath, function(err) {
if (err) {
//上传失败
var json = {
'status': '0'
};
res.send(json);
} else {
//成功
var json = {
'status': '1',
'userName': req.session.userName
};
res.send(json);
}
})
});
})
app.post('/docut', urlencodedParser, function(req, res) {
console.log(req.body);
var width = req.body.width;
var height = req.body.height;
var left = req.body.left;
var top = req.body.top;
gm("./avatar/" + req.session.userName+'.jpg')
.crop(width, height, left, top)
.write("./avatar/" + req.session.userName+'.jpg', function(err) {
if (err) {
var json = {'status':'-1'};
res.send(json);
return;
}
var json = {'status':'1'};
res.send(json);
});
})
这里前台将图片上传后,前台首先将文件对象放到formData对象中,然后以ajax的方式提交后台,后台通过formidable接受到文件,将图片保存到avatar文件夹下并且改名,之后前台在当前以页面显示图片,给用户剪裁,剪裁好后,将剪裁的参数提交到后台,后台根据参数用gm剪裁,保存更改
java ajax 更改头像_ajax+node实现头像更改相关推荐
- java ajax 点赞功能_Ajax+jQuery+bootstrap+Java实现异步点赞功能,并限制点击次数
在很多的网站上有很多不同的点赞,我不知道他们是怎么实现的,下面我来分享一下我写的点赞实现,共大家参考下, 这是我在一个项目抽取的代码,可能有些样式会发生变化,但是功能不会影响. 网页代码: 这个是根据 ...
- java ajax 登陆验证_AJAX+JAVA用户登陆注册验证
需求 通过ajax异步刷新页面验证用户输入的账号密码是否在数据库中存在. 技术栈 JSP+Servlet+Oracle 具体代码 JSP部分: pageEncoding="UTF-8&quo ...
- java ajax轮询_ajax轮询(ajax轮询实现聊天)
最近一直在研究ajax长轮询连实现即时通信,但是到底是个怎么轮询法?难道. 一般最原始的作法就是在客户端搞个定时器一直向后台请求,而ajax的长轮询与一般的http连接不一样,它发送的是长连接,比如说 ...
- java ajax轮询_ajax轮询
http://blog.csdn.net/qq_23412263/article/details/70260057 原理 普通的jquery ajax轮询的原理主要是,客户端通过定时器定时发送ajax ...
- java ajax 定时刷新_Ajax实现定时刷新页面
XML Schema命名空间解析 URI Web中汇集了各种资源.资源可以是具有标识的任何事物, 如文档. 文件. 菜单项. 计算机. 服务等, 甚至可以包括人. 组织和概念[BernersLee ...
- java cropper 上传_java web 网站头像上传处理 (springmvc +bootstrap+cropper)
制作头像上传.请根据您的实际需求,修改代码,不完全正确,仅供参考! 前端页面设计使用bootstrap ,头像预览和剪裁工具使用cropper 后台使用springmvc. 现在来看前端的页面设计 前 ...
- java模仿微信QQ群聊头像拼接,根据群聊内的用户头像拼接群聊头像,九宫格
java模仿微信QQ群聊头像拼接,根据群聊内的用户头像拼接群聊头像,九宫格 效果图,这里只放了几张,1-9张图片都可以的,如果图片路径是从数据库查出来的相对路径,记得加上绝对路径否则会报找不到读取文件 ...
- java+ajax实现文件上传
1 文件上传 利用Java+ajax实现文件上传,这里介绍两种提交方法,第一种是file提交,第二种是base64提交 1.1 file方式 1.1.1 FileNameUtils public cl ...
- ajax json的参数,java ajax json参数
java ajax json参数 [2021-02-02 08:55:23] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&quo ...
最新文章
- django之全文检索
- 最强去马赛克AI来了,分分钟回到无马世界,连像素风《我的世界》人物都能复原...
- NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码
- php正则表达式匹配img中任意属性的方法
- PE文件格式--------------导出表
- 解耦,未解耦的区别_幂等与时间解耦之旅
- 南昌地铁信息化服务器,南昌地铁传来大消息!太方便了!
- GitHub简单教程
- matlab官方中文网站
- coreos(coreos介绍)
- sed替换指定字符串为某变量的值
- Unity Shader - 车漆效果(基于MatCap)
- 面对众多的选择,我选择什么
- 寻路 pathfinder 狂乱画
- 第一遍Java学习笔记
- VS集成Qt环境搭建
- 算法与数据结构实验题 7.4 玩游戏的亚索 (最小支撑树)
- multisim元件库介绍
- 微信第三方平台授权(第三方)
- [原创] 树莓派使用多个联通4G上网卡
热门文章
- 沟通技巧系列 - 积极和移情倾听
- 关于Linux开源项目基础组件make编译流程
- UTC/GMT 时间转换
- 由浅至深 谈谈.NET混淆原理 (四) -- 反混淆(原理 + 工具篇)
- Android 帧动画 xml 方式实现
- Flutter透明度渐变动画Opacity实现透明度渐变动画效果
- Ta Muid(Dreams 梦幻)
- FLL - C++与VFP 双向混合编程
- JPA ---- 表之间的映射关系
- Linux下安装Beego:go install: cannot install cross-compiled binaries when GOBIN is set