FileController .java
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.PutObjectRequest;
import life.majiang.community.community.dto.FileDTO;
import life.majiang.community.community.util.AliyunOssConfigConstant;
import org.apache.commons.lang3.StringUtils;
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;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.UUID;
/**
* 处理文件上传
*/
@Controller
public class FileController {
private static String bucketName = AliyunOssConfigConstant.BUCKE_NAME;
private static String endPoint = AliyunOssConfigConstant.END_POINT;
private static String accessKeyId = AliyunOssConfigConstant.AccessKey_ID;
private static String accessKeySecret = AliyunOssConfigConstant.AccessKey_Secret;
@ResponseBody
@RequestMapping("/file/upload")
public FileDTO upload(HttpServletRequest request){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
MultipartFile file = multipartRequest.getFile("editormd-image-file");
String realPath = System.getProperty("user.dir");
realPath+="\\target\\classes\\static\\images\\";
File folder = new File(realPath);
OSS ossClient = new OSSClientBuilder().build(endPoint,accessKeyId ,accessKeySecret);
//文件重命名
String oldFile = file.getOriginalFilename();
String newFile = UUID.randomUUID().toString()+oldFile.substring(oldFile.lastIndexOf("."),oldFile.length());
String url;
FileDTO fileDTO = null;
try {
//拼接url
url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/images/"+newFile;
fileDTO = new FileDTO();
fileDTO.setSuccess(1);
StringBuilder sb = new StringBuilder(url);
sb.replace(4,5,"%3A");
sb.replace(24,25,"%3A");
//阿里云图片保存URL
fileDTO.setUrl("https://xxxxxxx.oss-cn-shenzhen.aliyuncs.com/"+sb);
// 上传文件流。
InputStream inputStream = new FileInputStream(folder+"/"+newFile);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, url,inputStream);
ossClient.putObject(putObjectRequest);
return fileDTO;
}catch (Exception e){
fileDTO.setSuccess(0);
e.printStackTrace();
}finally {
ossClient.shutdown();
}
return null;
}
}
AliyunOssConfigConstant .java
public class AliyunOssConfigConstant {
private AliyunOssConfigConstant(){}
//阿里云仓库名称
public static final String BUCKE_NAME = "xxxxxxxxxxxxxxxx";
//地域节点,END_POINT以杭州为例,其它Region请按实际情况填写。
public static final String END_POINT = "http://oss-cn-hangzhou.aliyuncs.com";
//AccessKey ID
public static final String AccessKey_ID = "xxxxxxxxxxxxx";
//Access Key Secret
public static final String AccessKey_Secret = "xxxxxxxxxxxxxx";
}
FileDTO .java
public class FileDTO {
private int success;
private String message;
private String url;
public int getSuccess() {
return success;
}
public void setSuccess(int success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
publish.html 在from标签里面,必须有submit
<div class="form-group" id="question-editor">
<label for="description">问题补充(必填,请参照右侧提示):</label>
<textarea name="description" th:text="${description}" id="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/",
imageUpload: true,
imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
imageUploadURL: "/file/upload"
});
});
</script>
question.html
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" id="question-view" >
<textarea style="display: none;" th:text="${question.description}"></textarea>
</div>
<script>
$(function () {
editormd.markdownToHTML("question-view",{});
});
</script>