发表于: 2018-01-02 21:30:24
2 462
今天完成的事情:
大体做完了任务七,完成了一整个流程。
注册的时候,选择头像,输入密码,电话号码,点击发送验证码按钮,然后在页面输入验证码,邮箱地址,提交注册。验证码的有效时间设置为120s。
在点击验证码的时候,这里做了一个异步请求。然后点击提交注册按钮时,会在后台检测用户输入名称是否为空,密码是否为空,提交的名称在数据库是否已经存在。然后提交的验证码是否正确。通过之后,然后才会把注册成功,然后把用户的信息存入数据库中。
这就是一整个的相对完整注册的流程。
下面是一些代码和效果的展示:
//这个是前端的页面展示,以及ajxs的异步请求,这个来源于对前端师兄的请教。
<form action="${pageContext.request.contextPath}/newUser" method="post" enctype="multipart/form-data">
<td>头像<input type=file name="file" id="file" onchange="javascript:setImagePreview();"></td>
<td>昵称<input type="text" name="name"></td>
<td>密码<input type="text" name="password"></td>
<td>验证码<input type="text" name="webCode"></td>
<input type="submit" value="提交注册">
</form>
<td>电话号码<input type="text" id="phone" name="phoneNumber"></td>
<td>邮箱<input type="text" id="Email" name="Email"></td>
<button onclick="gets()" type="submit" >发送验证码</button>
</body>
</html>
<script type="text/javascript">
function setImagePreview() {
var docObj = document.getElementById("file");
var imgObjPreview = document.getElementById("preview");
if (docObj.files && docObj.files[0]) {
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '400px';
imgObjPreview.style.height = '400px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
} else {
//IE下,使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
var localImagId = document.getElementById("localImag");
//必须设置初始大小
localImagId.style.width = "400px";
localImagId.style.height = "400px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
try {
localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters
.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
} catch (e) {
alert("您上传的图片格式不正确,请重新选择!");
return false;
}
imgObjPreview.style.display = 'none';
document.selection.empty();
}
return true;
}
// /*js 实现*/
function gets() {
var phone = document.getElementById("phone").value;
var Email = document.getElementById("Email").value; //获取输入框值
var xxx;
xxx = new XMLHttpRequest(); //声明XMLHttpRequest实例对象xxx
var text = "phoneNumber=" + phone +"&Email=" +Email;
xxx.open("Post","/code",true); //生成请求
xxx.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xxx.send(text); //发送请求以及输入的数据
xxx.onreadystatechange = function(){
if (xxx.readyState==4 && xxx.status == 200) { //如果服务器响应成功就执行下面函数
var texts = JSON.parse(xxx.responseText); //根据不同的返回值显示不同的文字
if (texts.message === "success") {
window.location.href = "welcome.html";
}
else {
if (texts.message === "密码错误") {
document.getElementById("message").innerHTML = "密码错误";
}
else {
document.getElementById("message").innerHTML = "账号不存在";
}
}
}
}
}</script>
//下面是注册的一个流程:
@RequestMapping(value = "/newUser", method = RequestMethod.POST)
public String forRegister(MultipartFile file, String name, String password,String webCode){
logger.info("传入的姓名是:"+name);
logger.info("传入的密码为:"+password);
String fileName = file.getOriginalFilename();
logger.info("传入文件的名称是:"+fileName);
String bucketName = "test-for-java-jnshu";
String code = jedis.get("code");
//这里用当前系统的毫秒值加上传入文件的后缀(例如jpg,gif),然后添加到ObjectKey,作为传入文件的命名,这样自动匹配格式。
String Objectkey =String.valueOf(System.currentTimeMillis())+"."+fileName.substring(fileName.lastIndexOf(".")+1);
//endpoint 来自于官方文档。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
//这里是文件在OSS的路径,存入数据库中。
String picturePath ="http://" +bucketName+"."+endpoint.substring(7)+"/"+Objectkey;
System.out.println("picturePath"+picturePath);
List<User> list = userService.nameList();
//前台表单如果不输入数据,直接提交,值是"",而不是NULL.
if(name==null||name.trim().equals("")){
logger.info("姓名不能为空");
return null;
}else if(password==null||password.trim().equals("") ) {
logger.info("密码不能为空");
return null;
}else if(webCode.equals(jedis.get("code"))){//验证用户输入的验证码和接受的验证码是否一样
for(User user:list) {if(user.getName().equals(name)){
logger.info("数据库已存在姓名为---->"+name);return null;
}
}
try{
Calendar c = Calendar.getInstance();
Long create_at =c.getTimeInMillis();
password = MD5UtilAndSalt.getMD5(password);
logger.info("加密后的密码为:"+password);
InputStream input = file.getInputStream();
TestOSS.setPic(input,bucketName,Objectkey,endpoint);//调用第三方API把图片上传至服务器OSS
userService.addUser(name, password,create_at,picturePath);
return "web";
}catch (Exception e){
e.printStackTrace();
}
return null;
}
return null;
}
//发送验证码 这里设置了6位的随机验证码
@RequestMapping(value = "code",method = RequestMethod.POST)
public String sendCode(String phoneNumber,String Eamil) {
Random r = new Random();
String code = String.valueOf(r.nextInt(999999));
try {
SendMes.sendSms(code, phoneNumber);
jedis.setex("code",120,code);//这里key为code 有效时间为120S
}catch (Exception e){
e.printStackTrace();
}
return "register";
}贴一下页面:
虽然很丑,不过功能还都有了。
该有的还都有了,目前还差一个数据的传输吧,从阿里传输到七牛。
明天计划的事情:
把数据传输做了。
遇到的问题:
主要是那个异步请求,因为我这边用form表单提交,每提交一次就会刷新一次表单,很不适用。
收获:
以上。
评论