添加多运行环境支持 #14

Open
xiaohai2271 wants to merge 36 commits from feat-multlyEnv#13 into master-old
7 changed files with 95 additions and 43 deletions
Showing only changes of commit 19068ff14d - Show all commits

View File

@@ -2,7 +2,7 @@ package cn.celess.blog.controller;
import cn.celess.blog.enmu.ResponseEnum; import cn.celess.blog.enmu.ResponseEnum;
import cn.celess.blog.entity.Response; import cn.celess.blog.entity.Response;
import cn.celess.blog.entity.model.QiniuResponse; import cn.celess.blog.entity.model.FileResponse;
import cn.celess.blog.exception.MyException; import cn.celess.blog.exception.MyException;
import cn.celess.blog.service.CountService; import cn.celess.blog.service.CountService;
import cn.celess.blog.service.FileService; import cn.celess.blog.service.FileService;
@@ -161,10 +161,10 @@ public class CommonController {
String mime = fileName.substring(fileName.lastIndexOf(".")); String mime = fileName.substring(fileName.lastIndexOf("."));
if (".png".equals(mime.toLowerCase()) || ".jpg".equals(mime.toLowerCase()) || if (".png".equals(mime.toLowerCase()) || ".jpg".equals(mime.toLowerCase()) ||
".jpeg".equals(mime.toLowerCase()) || ".bmp".equals(mime.toLowerCase())) { ".jpeg".equals(mime.toLowerCase()) || ".bmp".equals(mime.toLowerCase())) {
QiniuResponse qiniuResponse = fileService.getFileManager().uploadFile(file.getInputStream(), "img_" + System.currentTimeMillis() + mime); FileResponse fileResponse = fileService.getFileManager().uploadFile(file.getInputStream(), "img_" + System.currentTimeMillis() + mime);
map.put("success", 1); map.put("success", 1);
map.put("message", "上传成功"); map.put("message", "上传成功");
map.put("url", "http://cdn.celess.cn/" + qiniuResponse.key); map.put("url", "http://cdn.celess.cn/" + fileResponse.key);
response.getWriter().println(mapper.writeValueAsString(map)); response.getWriter().println(mapper.writeValueAsString(map));
redisUtil.setEx(request.getRemoteAddr() + "-ImgUploadTimes", uploadTimes + 1 + "", 2, TimeUnit.HOURS); redisUtil.setEx(request.getRemoteAddr() + "-ImgUploadTimes", uploadTimes + 1 + "", 2, TimeUnit.HOURS);
return; return;
@@ -208,12 +208,12 @@ public class CommonController {
assert fileName != null; assert fileName != null;
String mime = fileName.substring(fileName.lastIndexOf(".")); String mime = fileName.substring(fileName.lastIndexOf("."));
String name = fileName.replace(mime, "").replaceAll(" ", ""); String name = fileName.replace(mime, "").replaceAll(" ", "");
QiniuResponse qiniuResponse = fileService.getFileManager().uploadFile(file.getInputStream(), "file_" + name + '_' + System.currentTimeMillis() + mime); FileResponse fileResponse = fileService.getFileManager().uploadFile(file.getInputStream(), "file_" + name + '_' + System.currentTimeMillis() + mime);
resp.put("originalFilename", fileName); resp.put("originalFilename", fileName);
resp.put("success", qiniuResponse != null); resp.put("success", fileResponse != null);
if (qiniuResponse != null) { if (fileResponse != null) {
resp.put("host", "http://cdn.celess.cn/"); resp.put("host", "http://cdn.celess.cn/");
resp.put("path", qiniuResponse.key); resp.put("path", fileResponse.key);
} }
result.add(resp); result.add(resp);
} }

View File

@@ -0,0 +1,25 @@
package cn.celess.blog.entity.model;
/**
* @author : xiaohai
* @date : 2020/10/15 22:16
* @desc :
*/
public class FileInfo {
/**
* 文件名
*/
public String key;
/**
* 文件hash值
*/
public String hash;
/**
* 文件大小,单位:字节
*/
public long size;
/**
* 文件上传时间单位为100纳秒
*/
public long uploadTime;
}

View File

@@ -1,13 +1,13 @@
package cn.celess.blog.entity.model; package cn.celess.blog.entity.model;
/** /**
* @author : xiaohai * @author : xiaohai
* @date : 2019/04/21 22:43 * @date : 2019/04/21 22:43
*/ */
public class QiniuResponse { public class FileResponse {
public String key; public String key;
public String hash; public String hash;
public String bucket; public String bucket;
public long fsize; public long size;
} }

View File

@@ -1,10 +1,11 @@
package cn.celess.blog.service; package cn.celess.blog.service;
import cn.celess.blog.entity.model.QiniuResponse; import cn.celess.blog.entity.model.FileInfo;
import com.qiniu.storage.model.FileInfo; import cn.celess.blog.entity.model.FileResponse;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.InputStream; import java.io.InputStream;
import java.util.List;
/** /**
* @author : xiaohai * @author : xiaohai
@@ -18,10 +19,10 @@ public interface FileManager {
* 解决语法错误 占位方法 * 解决语法错误 占位方法
* *
*/ */
QiniuResponse uploadFile(InputStream is, String fileName); FileResponse uploadFile(InputStream is, String fileName);
/** /**
* 解决语法错误 占位方法 * 解决语法错误 占位方法
*/ */
FileInfo[] getFileList(); List<FileInfo> getFileList();
} }

View File

@@ -1,19 +1,25 @@
package cn.celess.blog.service.fileserviceimpl; package cn.celess.blog.service.fileserviceimpl;
import cn.celess.blog.entity.model.QiniuResponse; import cn.celess.blog.entity.model.FileInfo;
import cn.celess.blog.entity.model.FileResponse;
import cn.celess.blog.service.FileManager; import cn.celess.blog.service.FileManager;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qiniu.common.QiniuException; import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone; import com.qiniu.common.Zone;
import com.qiniu.http.Response; import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager; import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration; import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager; import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth; import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author : xiaohai * @author : xiaohai
@@ -42,7 +48,7 @@ public class QiniuFileServiceImpl implements FileManager {
} }
@Override @Override
public QiniuResponse uploadFile(InputStream is, String fileName) { public FileResponse uploadFile(InputStream is, String fileName) {
init(); init();
//文件存在则删除文件 //文件存在则删除文件
if (continueFile(fileName)) { if (continueFile(fileName)) {
@@ -55,7 +61,15 @@ public class QiniuFileServiceImpl implements FileManager {
//上传 //上传
try { try {
Response response = uploadManager.put(is, fileName, auth.uploadToken(bucket), null, null); Response response = uploadManager.put(is, fileName, auth.uploadToken(bucket), null, null);
return response.jsonToObject(QiniuResponse.class); FileResponse fileResponse = new FileResponse();
StringMap stringMap = response.jsonToMap();
fileResponse.key = (String) stringMap.get("key");
fileResponse.bucket = (String) stringMap.get("bucket");
fileResponse.size = (long) stringMap.get("fsize");
fileResponse.hash = (String) stringMap.get("hash");
return fileResponse;
} catch (QiniuException e) { } catch (QiniuException e) {
Response r = e.response; Response r = e.response;
System.err.println(r.toString()); System.err.println(r.toString());
@@ -64,20 +78,30 @@ public class QiniuFileServiceImpl implements FileManager {
} }
@Override @Override
public FileInfo[] getFileList() { public List<FileInfo> getFileList() {
init(); init();
List<FileInfo> infoList = null;
BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, "", 1000, ""); BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, "", 1000, "");
FileInfo[] items = null;
while (fileListIterator.hasNext()) { while (fileListIterator.hasNext()) {
//处理获取的file list结果 //处理获取的file list结果
items = fileListIterator.next(); infoList = new ArrayList<com.qiniu.storage.model.FileInfo>(Arrays.asList(fileListIterator.next()))
.stream()
.map(item -> {
FileInfo fileInfo = new FileInfo();
fileInfo.key = item.key;
fileInfo.hash = item.hash;
fileInfo.size = item.fsize;
fileInfo.uploadTime = item.putTime;
return fileInfo;
})
.collect(Collectors.toList());
} }
return items; return infoList;
} }
private boolean continueFile(String key) { private boolean continueFile(String key) {
FileInfo[] allFile = getFileList(); List<FileInfo> fileList = getFileList();
for (FileInfo fileInfo : allFile) { for (FileInfo fileInfo : fileList) {
if (key.equals(fileInfo.key)) { if (key.equals(fileInfo.key)) {
return true; return true;
} }

View File

@@ -5,8 +5,8 @@ import cn.celess.blog.enmu.RoleEnum;
import cn.celess.blog.enmu.UserAccountStatusEnum; import cn.celess.blog.enmu.UserAccountStatusEnum;
import cn.celess.blog.entity.Response; import cn.celess.blog.entity.Response;
import cn.celess.blog.entity.User; import cn.celess.blog.entity.User;
import cn.celess.blog.entity.model.FileResponse;
import cn.celess.blog.entity.model.PageData; import cn.celess.blog.entity.model.PageData;
import cn.celess.blog.entity.model.QiniuResponse;
import cn.celess.blog.entity.model.UserModel; import cn.celess.blog.entity.model.UserModel;
import cn.celess.blog.entity.request.LoginReq; import cn.celess.blog.entity.request.LoginReq;
import cn.celess.blog.entity.request.UserReq; import cn.celess.blog.entity.request.UserReq;
@@ -186,7 +186,7 @@ public class UserServiceImpl implements UserService {
@Override @Override
public Object updateUserAavatarImg(InputStream is, String mime) { public Object updateUserAavatarImg(InputStream is, String mime) {
User user = redisUserUtil.get(); User user = redisUserUtil.get();
QiniuResponse upload = fileService.getFileManager().uploadFile(is, user.getEmail() + "_" + user.getId() + mime.toLowerCase()); FileResponse upload = fileService.getFileManager().uploadFile(is, user.getEmail() + "_" + user.getId() + mime.toLowerCase());
user.setAvatarImgUrl(upload.key); user.setAvatarImgUrl(upload.key);
userMapper.updateAvatarImgUrl(upload.key, user.getId()); userMapper.updateAvatarImgUrl(upload.key, user.getId());
redisUserUtil.set(user); redisUserUtil.set(user);

View File

@@ -2,7 +2,8 @@ package cn.celess.blog;
import cn.celess.blog.entity.Response; import cn.celess.blog.entity.Response;
import cn.celess.blog.entity.model.QiniuResponse; import cn.celess.blog.entity.model.FileInfo;
import cn.celess.blog.entity.model.FileResponse;
import cn.celess.blog.entity.model.UserModel; import cn.celess.blog.entity.model.UserModel;
import cn.celess.blog.entity.request.LoginReq; import cn.celess.blog.entity.request.LoginReq;
import cn.celess.blog.service.MailService; import cn.celess.blog.service.MailService;
@@ -10,7 +11,6 @@ import cn.celess.blog.service.FileManager;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.qiniu.storage.model.FileInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -37,6 +37,8 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@@ -327,21 +329,21 @@ public class BaseTest {
@Slf4j @Slf4j
public static class TestQiniuFileServiceImpl implements FileManager { public static class TestQiniuFileServiceImpl implements FileManager {
@Override @Override
public QiniuResponse uploadFile(InputStream is, String fileName) { public FileResponse uploadFile(InputStream is, String fileName) {
QiniuResponse response = new QiniuResponse(); FileResponse response = new FileResponse();
log.debug("上传文件请求,[fileName:{}]", fileName); log.debug("上传文件请求,[fileName:{}]", fileName);
response.key = "key"; response.key = "key";
response.bucket = "bucket"; response.bucket = "bucket";
response.hash = "hash"; response.hash = "hash";
response.fsize = 1; response.size = 1;
return response; return response;
} }
@Override @Override
public FileInfo[] getFileList() { public List<FileInfo> getFileList() {
log.debug("获取文件列表请求"); log.debug("获取文件列表请求");
return new FileInfo[0]; return new ArrayList<>();
} }
} }
} }