**
基于UniApp开发的App
**
提供系统源文件,数据库,如有需求留言联系V 19862100164
运用技术:
- 1.uniApp+JSP/Servlet+MySQL
APP内容需求:
整个APP涉及相片的上传、删除,相片的拍摄与上传、视频的上传、删除,视频的拍摄与上传、记事的添加、修改、删除、个人资料的修改(包含:头像、背景图片)、帮助中心模块、意见反馈模块的上传。
界面&模块介绍
1) app引导页界面,配合清新的颜色搭配,让用户有更舒适的体验
2) 登陆界面
3) 注册账号界面(引入了聚合科技的短信接口,用户可以通过手机号进行账号注册)
4) 首页界面
5)记事的添加
6)个人资料界面之头像、背景的修改
7) 我的故事—查看、模糊搜索、修改、删除
验证码的生成
public class BufferImage extends HttpServlet {
public static final int WIDTH = 120;//生成图片的宽度
public static final int HEIGHT = 30;//生成图片的高度
public static final int WORDS_NUMBER = 4;//验证码中字符的个数
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("utf-8");
/* 允许跨域的主机地址 */
resp.setHeader("Access-Control-Allow-Origin", "*");
/* 允许跨域的请求方法GET, POST, HEAD 等 */
resp.setHeader("Access-Control-Allow-Methods", "*");
/* 重新预检验跨域的缓存时间 (s) */
resp.setHeader("Access-Control-Max-Age", "3600");
/* 允许跨域的请求头 */
resp.setHeader("Access-Control-Allow-Headers", "*");
/* 是否携带cookie */
resp.setHeader("Access-Control-Allow-Credentials", "true");
// TODO Auto-generated method stub
String createTypeFlag = req.getParameter("createTypeFlag");//接收客户端传递的createTypeFlag标识
//在内存中创建一张图片
BufferedImage bi = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_3BYTE_BGR);
//得到图片
Graphics g = bi.getGraphics();
//设置图片的背景色
setBackGround(g);
//设置图片的边框
setBorder(g);
//在图片上画干扰线
drawRandomLine(g);
//在图片上放上随机字符
String randomString = this.drawRandomNum((Graphics2D)g, createTypeFlag);
//将随机数存在session中
// resp.getWriter().print(randomString);
req.getSession().setAttribute("checkcode", randomString);
System.out.println("radnomString"+randomString);
//设置响应头通知浏览器以图片的形式打开
resp.setContentType("image/jpeg");
//设置响应头控制浏览器不要缓存
resp.setDateHeader("expries", -1);
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Pragma", "no-cache");
//将图片传给浏览器
ImageIO.write(bi, "jpg", resp.getOutputStream());
}
//设置图片背景色
//@param g
private void setBackGround(Graphics g) {
//设置颜色
g.setColor(Color.WHITE);
//填充区域
g.fillRect(0, 0, WIDTH, HEIGHT);
}
/*
* 设置图片的边框
* @param g
* */
private void setBorder(Graphics g) {
//设置边框颜色
g.setColor(Color.BLUE);
//边框区域
g.drawRect(1, 1, WIDTH - 2, HEIGHT -2);
}
/*
* 在图片上画随机线条
* @param g
* */
private void drawRandomLine(Graphics g) {
//设置颜色
g.setColor(Color.GREEN);
//设置线条个数并画线
for ( int i = 0 ; i < 3 ; i++ ) {
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int x2 = new Random().nextInt(WIDTH);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
/*
* 在图片上画随机字符
* @param g
* @param createTypeFlag
* @return String
* */
private String drawRandomNum(Graphics g,String createTypeFlag) {
//设置颜色
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD,20));
//数字字母的组合
String baseNumLetter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
String baseNum = "0123456789";
String baseLetter = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
if ( createTypeFlag != null && createTypeFlag.length() > 0 ) {
if( createTypeFlag.equals("nl") ) {
//截取数字和字母的组合
return createRandomChar((Graphics2D) g,baseNumLetter);
} else if ( createTypeFlag.equals("n") ) {
//截取数字的组合
return createRandomChar((Graphics2D) g,baseNum);
} else if ( createTypeFlag.equals("l") ) {
//截取字母的组合
return createRandomChar((Graphics2D) g,baseLetter);
}
} else {
//截取数字和字母的组合
return createRandomChar((Graphics2D) g,baseNumLetter);
}
return "";
}
/*
* 创建随机字符
* @param g
* @param baseChar
* @return String
* */
private String createRandomChar(Graphics2D g , String baseChar) {
StringBuffer b = new StringBuffer();
int x = 5;
String ch = "";
for ( int i = 0 ; i < WORDS_NUMBER ; i++ ) {
//设置字体的旋转角度
int degree = new Random().nextInt() % 30;
ch = baseChar.charAt(new Random().nextInt(baseChar.length())) + "";
b.append(ch);
//正向角度
g.rotate(degree * Math.PI / 180 , x,20);
g.drawString(ch, x, 20);
//反向角度
g.rotate(-degree * Math.PI / 180 , x,20);
x+=30;
}
return b.toString();
}
提供系统源文件,数据库,如有需求联系 19862100164