简介:
使用:
下载源码:https://github.com/pandao/editor.md/archive/master.zip
添加到新项目中
网页适当位置插入代码
<div class="form-group" id="question-editor">
<label for="description">问题补充 (必填,请参照右侧提示):</label>
<textarea name="description" id="description" th:text="${description}" style="display:none;"
class="form-control"
cols="30"
rows="10"></textarea>
</div>
<script type="text/javascript">
$(function () {
var editor = editormd("question-editor", {
width: "100%",
height: 350,
path: "/js/lib/",
delay: 0,
watch: false,
placeholder: "请输入问题描述",
imageUpload: true,
imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
imageUploadURL: "/file/upload",
});
});
</script>
在网页头部引入依赖
<link rel="stylesheet" href="/css/editormd.min.css">
<link rel="stylesheet" href="/css/editormd.preview.min.css">
<script src="/js/editormd.min.js" type="application/javascript"></script>
<script src="/js/moment.js" type="application/javascript"></script>
<script src="/js/lib/marked.min.js"></script>
<script src="/js/lib/prettify.min.js"></script>
上传:
创建一个DTO类
package life.majiang.community.dto;
import lombok.Data;
@Data
public class FileDTO {
private int success;
private String message;
private String url;
}
创建一个controller类
package life.majiang.community.controller;
import life.majiang.community.dto.FileDTO;
import life.majiang.community.provider.UCloudProvider;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
@Controller
@Slf4j
public class FileController {
@Autowired
private UCloudProvider uCloudProvider;
@RequestMapping("/file/upload")
@ResponseBody
public FileDTO upload(HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("editormd-image-file");
try {
String fileName = uCloudProvider.upload(file.getInputStream(), file.getContentType(), file.getOriginalFilename());
FileDTO fileDTO = new FileDTO();
fileDTO.setSuccess(1);
fileDTO.setUrl(fileName);
return fileDTO;
} catch (Exception e) {
log.error("upload error", e);
FileDTO fileDTO = new FileDTO();
fileDTO.setSuccess(0);
fileDTO.setMessage("上传失败");
return fileDTO;
}
}
}
在ucloud创建一个云存储利用SDK来上传图片生成预览
参考资料https://github.com/ucloud/ufile-sdk-java
创建一个provider类
package life.majiang.community.provider;
import cn.ucloud.ufile.UfileClient;
import cn.ucloud.ufile.api.object.ObjectConfig;
import cn.ucloud.ufile.auth.ObjectAuthorization;
import cn.ucloud.ufile.auth.UfileObjectLocalAuthorization;
import cn.ucloud.ufile.bean.PutObjectResultBean;
import cn.ucloud.ufile.exception.UfileClientException;
import cn.ucloud.ufile.exception.UfileServerException;
import life.majiang.community.exception.CustomizeErrorCode;
import life.majiang.community.exception.CustomizeException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.UUID;
@Service
@Slf4j
public class UCloudProvider {
@Value("${ucloud.ufile.public-key}")
private String publicKey;
@Value("${ucloud.ufile.private-key}")
private String privateKey;
@Value("${ucloud.ufile.bucket-name}")
private String bucketName;
@Value("${ucloud.ufile.region}")
private String region;
@Value("${ucloud.ufile.suffix}")
private String suffix;
@Value("${ucloud.ufile.expires}")
private Integer expires;
public String upload(InputStream fileStream, String mimeType, String fileName) {
String generatedFileName;
String[] filePaths = fileName.split("\\.");
if (filePaths.length > 1) {
generatedFileName = UUID.randomUUID().toString() + "." + filePaths[filePaths.length - 1];
} else {
throw new CustomizeException(CustomizeErrorCode.FILE_UPLOAD_FAIL);
}
try {
ObjectAuthorization objectAuthorization = new UfileObjectLocalAuthorization(publicKey, privateKey);
ObjectConfig config = new ObjectConfig(region, suffix);
PutObjectResultBean response = UfileClient.object(objectAuthorization, config)
.putObject(fileStream, mimeType)
.nameAs(generatedFileName)
.toBucket(bucketName)
.setOnProgressListener((bytesWritten, contentLength) -> {
})
.execute();
if (response != null && response.getRetCode() == 0) {
String url = UfileClient.object(objectAuthorization, config)
.getDownloadUrlFromPrivateBucket(generatedFileName, bucketName, expires)
.createUrl();
return url;
} else {
log.error("upload error,{}", response);
throw new CustomizeException(CustomizeErrorCode.FILE_UPLOAD_FAIL);
}
} catch (UfileClientException e) {
log.error("upload error,{}", fileName, e);
throw new CustomizeException(CustomizeErrorCode.FILE_UPLOAD_FAIL);
} catch (UfileServerException e) {
log.error("upload error,{}", fileName, e);
throw new CustomizeException(CustomizeErrorCode.FILE_UPLOAD_FAIL);
}
}
}