发表于: 2017-09-14 16:02:35
2 724
今天做的事:
还是调用第三方api
首先短信验证有点问题,先放到后面解决
然后邮箱验证和短信验证同理,搁置不管
最后就是图片上传
今天优化了之前的图片上传
public String putPicture(){//路径需要转换
//用来存文件名
String key = null;
try{//图片上传逻辑块
//打开文件选择对话框
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFileChooser fileChooser = new JFileChooser();
fileChooser.showOpenDialog(null);
String filePath = "" + fileChooser.getSelectedFile();
String fileName = "" + fileChooser.getSelectedFile().getName();
System.out.println("选择文件路径: " + filePath);
System.out.println("选择文件的文件名: " + fileName);
String newURL = filePath.replaceAll("\\\\","/");
System.out.println("转义后的文件路径:" + newURL);
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone1());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "rGaYK9w52Bp0mVwlsvlSfvyr-Ba5KSw1n7FxajQR";
String secretKey = "kxnCINxurLUPkxAnat7L60bl9dvZWV7NSPLLcZB0";
String bucket = "picture-test";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
// String localFilePath = "D:\\image\\1.jsp";
//默认不指定key的情况下,以文件内容的hash值作为文件名
key = fileName;
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(newURL, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
}catch (Exception e){
e.printStackTrace();
}
return "外网链接拼接字段" + key;
}
这里使用了文件选择对话框以及转义(参考志勇的小课堂视频)
首先说一下文件选择对话框
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
这是把外观设置成你所使用的平台的外观,也就是你这个程序在哪个平台运行,显示的窗口,对话框外观将是哪个平台的外观.
这个是java的设置图形界面外观的。
showOpenDialog是JFileChooser对象用于弹出窗口选择文件使用
剩下的都有相关注解,不一一说明。
最后返回一个String类型的url,存储到数据库中,可以获取外网链接中的图片资源(待测试)
目前测试这个文件选择对话框跑不起来,不清楚为什么,也不浪费时间找问题了,搁置
然后是之前一直困扰我的短信验证问题,请教了几位师兄,得到了很好的解决。
@RequestMapping(value = "/a/stu",method = RequestMethod.POST)
public String insertStu(Student student, Integer checking,HttpServletRequest request){
logger.info("Enter Controller.insertStu()");
logger.info("student=============>" + student);
logger.info("checking=============>" + checking);
// boolean flag1 = sS.sendMessage(student.getTel(), verify);
HttpSession session = request.getSession();
Integer verify = (int)session.getAttribute("verify");
logger.info("verify=============>" + verify);
boolean flag2 = (checking.equals(verify)) ? true : false;
logger.info("flag2=============>" + flag2);
//返回的外网链接插入到学生信息中
//这个图片调用因为有个文档交互的窗口,所以不知为什么总是跑不起来,所以就搁置了。
// String pictureurl = sS.putPicture();
// student.setImage(pictureurl);
boolean flag3 = sS.sendEmail(student.getEmail());
try {
if (flag2 == true && flag3 == true ) {
int i =sS.insert(student);
if(i > 0) {
logger.info("插入♂学生成功~");
return "redirect:/a/success";
}
}
}catch (Exception e){
e.printStackTrace();
}
return "redirect:/a/error";
}
//获取验证码
@RequestMapping(value = "/a/tel",method = RequestMethod.GET)
public void getVerify(String tel,HttpServletRequest request){
logger.info("Enter Controller.getVerify()");
logger.info("tel==============>" + tel);
//验证码
Integer verify = (int)((Math.random()*9+1)*100000);
sS.sendMessage(tel,verify);
HttpSession session = request.getSession();
session.setAttribute("verify",verify);
}
这里使用session传递随机验证码。
然后生成6位随机数的时候,我一开始是这么写的
Integer verify = (int)(Math.random()*1000000);
但是有的时候生成五位验证码,因为random方法有一定的局限性,所以做了上面的修改。
最后获取短信验证码这个按钮功能还是需要前端的ajax的异步实现(目前能想到的最好的办法)
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Created by IntelliJ IDEA.
User: yubotao
Date: 2017/09/12
Time: 14:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>插学生~</title>
<script src="${pageContext.request.contextPath}/cs10/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$('#sendCode').click(
function () {
var data={
tel:$("#tel").val()
}
$.ajax({
type:"GET",
url: "${pageContext.request.contextPath}/a/tel",
data:data,
dataType:JSON,
success:function () {
alert("success");
}
})
}
);
});
</script>
</head>
<body>
<h2>夭寿啦,插学生啦!</h2>
<form action="${pageContext.request.contextPath}/a/stu" method="post">
name:<input name="name" type="text"/><br>
age:<input name="age" type="text"/><br>
sex:<input name="sex" type="text"/><br>
profession:<input name="profession" type="text"/><br>
introduce:<input name="introduce" type="text"/><br>
studying:<input name="studying" type="text"/><br>
tel:<input id="tel" name="tel" type="text"/><br>
verify:<input name="checking" type="text"/>
<input type="button" value="获取验证码" id="sendCode">
<br>
Email:<input name="email" type="text"/><br>
createAt:<input name="createAt" type="text"/><br>
createBy:<input name="createBy" type="text"/><br>
<input type="submit" name="Submit" value="注册学生">
<input type="reset" name="Submit2" value="重填">
</form>
</body>
</html>
使用ajax需要引用文件。
jquery.min.js
不过ajax这些代码的原理是啥没搞清,也先不浪费时间去看了。
就这样,简单的demo测试通过
注册后会出现成功的界面,这里就不贴了。
对了,中间有一段过程是插入不成功,然后程序还不报错,直接跳转到错误界面,这个就有点伤了,最后搜了一下,将Spring的日志级别调整到debug级别,然后才发现错误,是一个字段之前更改类型了,最后插入的时候有问题,但是因为try-catch块加上日志级别是INFO,所以就看不到具体细节的问题。
更改日志级别也是一项比较有用的技能。
最后就是图片互传,我自己看看有没有多余时间实现。
提交代码了,小马哥给审核一下。
明天计划:开始任务8.
问题:那个文件选择对话框,跑不起来。
收获:获取短信验证码按钮功能;更改Spring日志级别为debug来发现问题;使用session传值,不过session没仔细看,有时间需要补一下session的知识。
评论