一、引入阿里云sdk
<!-- aliyun-oos --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
二、工具类
目前只有上传,删除。工具类有待完善!!!!!!
public String endpoint;
public String accessKeyId;
public String accessKeySecret;
public String bucketName;
/**
* 获取阿里云OSS客户端对象
*
* @return ossClient
*/
private OSS getOSSClient() {
endpoint=service.selectConfigByKey("aly_endpoint");
accessKeyId=service.selectConfigByKey("aly_accessKeyId");
accessKeySecret=service.selectConfigByKey("aly_accessKeySecret");
bucketName=service.selectConfigByKey("aly_bucketName");
return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 上传文件
*/
public String uploadFile(MultipartFile file) throws Exception {
// 创建OSSClient实例。
OSS ossClient = getOSSClient();
try{
String filename = file.getResource().getFilename();
//这里文件名用了uuid 防止重复,可以根据自己的需要来写
String name = UUID.randomUUID() + filename.substring(filename.lastIndexOf("."), filename.length());
name = "video/"+name.replace("-", "");
// 填写网络流地址。
InputStream inputStream = file.getInputStream();
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, name, inputStream);
ossClient.putObject(putObjectRequest);
//6 返回上传之后地址,拼接地址
String uploadUrl = "https://"+bucketName+"."+endpoint+"/"+name;
return uploadUrl;
}catch (Exception e){
throw e;
}finally {
ossClient.shutdown();
}
}
/**
* 批量删除oss文件
* @param keys 文件路径列表
* @throws Exception
*/
public void deleteFile(List<String> keys) throws Exception{
OSS ossClient = getOSSClient();
try{
DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys));
deleteObjectsResult.getDeletedObjects();
}catch (Exception e){
throw e;
}finally {
ossClient.shutdown();
}
}
三、前端代码
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增锻炼管理')" />
<th:block th:include="include :: bootstrap-fileinput-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-takeexercise-add">
<div class="form-group">
<label class="col-sm-3 control-label">标题:</label>
<div class="col-sm-8">
<textarea id="title" name="title" class="form-control"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">类型:</label>
<div class="col-sm-8">
<select id="type" name="type" class="form-control m-b" th:with="type=${@dict.getType('takeexercise')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">备注:</label>
<div class="col-sm-8">
<textarea id="remark" name="remark" class="form-control"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">视频:</label>
<div class="col-sm-8">
<div class="file-loading">
<input id="fileinput-demo-1" name="file" type="file" required>
</div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: bootstrap-fileinput-js" />
<script th:inline="javascript">
var prefix = ctx + "system/takeexercise"
$("#form-takeexercise-add").validate({
focusCleanup: true
});
$(document).ready(function () {
$("#fileinput-demo-1").fileinput({
'theme': 'explorer-fas',
'uploadUrl': prefix+'/add',
overwriteInitial: false,
showPreview:false,
showUpload: false,
uploadAsync:false, //false 同步上传,后台用数组接收,true 异步上传,每次上传一个file,会调用多次接口
previewClass:"uploadPreview"
}).on("change", function() {
// 清除掉上次上传的图片
$(".uploadPreview").find(".file-preview-frame:first").remove();
$(".uploadPreview").find(".kv-zoom-cache:first").remove();
}).on("filebatchselected", function(e, files) {
//$(this).fileinput("upload"); // 文件选择完直接调用上传方法。
}).on('filebatchuploadsuccess',function(event,data,previewId,index) {
console.log(data);
}).on("filebatchselected", function(event, data) {
var fileDir = $("#fileinput-demo-1").val();
var suffix = fileDir.substr(fileDir.lastIndexOf("."));
if(fileDir == "" ){
alert("选择需要导入的视频文件!");
return false;
}
if(suffix !=".mp4"){
alert("选择mp4格式的文件导入!");
return false;
}
})
});
function submitHandler() {
if ($.validate.form()) {
var formData = new FormData();
formData.append("title", $('#title').val());
formData.append("type", $('#type').val());
formData.append("remark", $('#remark').val());
formData.append("file", $('#fileinput-demo-1')[0].files[0]);
var config = {
url: prefix+'/add',
type: "post",
dataType: "json",
data: formData,
processData: false,//必须要加
contentType: false,//必须要加
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
$.modal.disable();
},
complete: function () {
$.modal.loading("正在处理中,请稍后...");
$.modal.disable();
},
success: function(result) {
$.operate.successCallback(result);
}
};
$.ajax(config);
}
}
</script>
</body>
</html>
四、后端
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(@RequestParam("file") MultipartFile file, Takeexercise takeexercise) {
try {
if(file!=null){
AliyunOssUtil aliyunOssUtil=new AliyunOssUtil();
String url=aliyunOssUtil.uploadFile(file);
takeexercise.setVideoUrl(url);
}
return toAjax(takeexerciseService.insertTakeexercise(takeexercise));
}catch (Exception e){
e.printStackTrace();
logger.error(e.getMessage());
return toAjax(0);
}
}