新建功能
在实际开发中,我们会有很多存储不同功能的服务器:
- 应用服务器:负责部署我们的应用
- 数据库服务器:运行我们的数据库
- 文件服务器:负责存储用户上传文件的服务器
首先是新建功能
点击新建按钮如下,有两个信息框,一个用于填写新建的信息,另一个则是检查组的信息。
- 第一步就是打开框口之后需要发送一个异步请求用于后台查询检查组的所有信息
- 并将数据以json的新式响应到前台进行渲染
handleCreate() {
this.resetForm();
this.dialogFormVisible = true;
//发送ajax请求将检查组的数据转为json显示上来
axios.post("/checkgroup/findAll.do").then((res) => {
if (res.data.flag) {
this.tableData = res.data.data;
} else {
this.$message.error(res.data.message);
}
})
},
- 然后就是另一个上传图片的功能需要点击代加号的小方框
- 将电脑中选择的图片上传到七牛云服务器上
- 当点击电脑内的图片时会发送一个异步请求到后台
- 利用封装号的工具类进行上传需要在工具类修改为自己帐号的帐号的密码以及项目名称
public class QiniuUtils {
public static String accessKey = "*****************";
public static String secretKey = "*******************";
public static String bucket = "******";
public static void upload2Qiniu(String filePath, String fileName) {
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
UploadManager uploadManager = new UploadManager(cfg);
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(filePath, fileName, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
} catch (QiniuException ex) {
Response r = ex.response;
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
}
//上传文件
public static void upload2Qiniu(byte[] bytes, String fileName) {
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = fileName;
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(bytes, 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
}
}
}
//删除文件
public static void deleteFileFromQiniu(String fileName) {
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
String key = fileName;
Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, cfg);
try {
bucketManager.delete(bucket, key);
} catch (QiniuException ex) {
//如果遇到异常,说明删除失败
System.err.println(ex.code());
System.err.println(ex.response.toString());
}
}
}
- 上传完毕之后前台会调用一个函数进行回显图片
- 就是将后台生成和图片名称响应给前台然后给对应的图片的名字赋值就可以了
//文件上传成功后的钩子,response为服务端返回的值,file为当前上传的文件封装成的js对象
handleAvatarSuccess(response, file) {
this.imageUrl = "http://qly5xyg00.hd-bkt.clouddn.com/" + response.data;
this.$message({
type: response.message ? 'success' : 'error',
message: response.message
});
this.formData.img = response.data;
},
7 然后就是将需要填写的信息封装好之后传递给后台操作数据库
查询功能
1.将三个参数传递给后台进行查询
- currentPage:当前页码
- pageSize:每页显示的行数
- queryString:需要查询的条件
2.传递给后台之后响应两个数据
- res.data.rows:当前页的数据
- res.data.total:总条数
定时删除垃圾图片
因为这个新建框选取图片的时候,只要一点击就可以上传到七牛云服务器,如果说用户之点击并没有点击确定将基本信息传递到后台,那么这个图片就并没有存储到数据里面去,所有需要定时来清理一些垃圾的图片。
- 使用redis缓存来清理,创建两个redis数据库
- 一个用来存储没有存储到数据库和存储到数据库的图片
- 一个用来只存储存储到数据库的图片
- 然后调用方法进行每天零层2点进行清理定时器用的时(quatrz框架)
public void clearImg(){
//根据redis中保存的两个set集合进行差值计算,获得垃圾图片集合
Set<String> set = jedisPool.getResource().sdiff(RedisConstant.SETMEAL_PIC_RESOURCES, RedisConstant.SETMEAL_PIC_DB_RESOURCES);
if (set!=null){
for (String picName : set) {
//删除七牛云服务器上的图片
QiniuUtils.deleteFileFromQiniu(picName);
//从redis集合中删除图片名称
jedisPool.getResource().srem(RedisConstant.SETMEAL_PIC_RESOURCES,picName);
System.out.println(picName+"这张图片背删除了");
}
}
}