SpringBoot下利用wangEditor3将图片上传到七牛
2018-04-23 本文已影响0人
九点半的马拉
wangEditor3一般将图片上传到服务器很便捷,网上也有很多方法,但官方文档中给出的上传到七牛云的方法没领悟到什么意思,尝试了几次,没有成功,我就采取了一种折中的方法,即利用图片上传服务器的方法上传到七牛云。
首先在网页中配置wangEditor图片上传
var E = window.wangEditor;
var editor = new E('#div1', '#div2'); // 两个参数也可以传入 elem 对象,class 选择器
editor.customConfig.debug = true;
editor.customConfig.uploadImgServer = '/post/upload';
editor.customConfig.uploadFileName = 'multiple'; <- 与后台获取文件名相同
editor.create();
创建结果返回类,wangEditor要求返回json信息
public class Result implements Serializable {
private Integer errno;
private String[] data;
public Integer getErrno() {
return errno;
}
public void setErrno(Integer errno) {
this.errno = errno;
}
public String[] getData() {
return data;
}
public void setData(String[] data) {
this.data = data;
}
}
//wangEditor图片上传返回数据
public class ResultUtil {
//上传成功
public static Result success(String[] object) {
Result result = new Result();
result.setErrno(0);
result.setData(object);
return result;
}
//上传失败
public static Result success() {
return null;
}
}
七牛云上传工具类
@Service
public class Qiniu {
Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
//从springboot的application.properties文件获取你注册的七牛云有关信息
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.secretKey}")
private String secretKey;
@Value("${qiniu.bucket}")
private String bucket;
@Value("${qiniu.path}")
private String path;
public String uploadToken(FileInputStream file, String key) {
Configuration cfg = new Configuration(Zone.zone1());
UploadManager uploadManager = new UploadManager(cfg);
logger.info("path=" + path);
try {
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(file, key, upToken, null, null);
// DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
logger.info("key:" + putRet.key);
String encodedFileName = URLEncoder.encode(putRet.key, "utf-8");
//获取下载地址,前天可以通过img访问
String finalUrl = String.format("%s/%s", path, encodedFileName);
logger.info("访问地址:" + finalUrl);
return finalUrl;
} 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 "";
}
}
在springmvc进行文件处理
@Controller
@RequestMapping("/post")
public class PostController {
@Resource
private Qiniu qiniu;
//帖子上传图片到服务器 MultipartFile multiple,与网页设置的名字相同
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody Result uploadImageHtml(MultipartFile multiple, HttpSession session, HttpServletRequest request) throws IOException {
if (multiple != null) {
FileInputStream inputStream = (FileInputStream) multiple.getInputStream();
String fileName = multiple.getOriginalFilename();
//下一句主要是创建文件名,我程序中还用到了springsecurity,你可以根据需要命名
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String fileNameExtension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
String realName = String.valueOf(System.currentTimeMillis()) + user.getUsername() + fileNameExtension;
String path = qiniu.uploadToken(inputStream, realName);
String [] str = {path};
return ResultUtil.success(str);
}
return ResultUtil.success();
}
}