阿里雲對象存儲服務(Object Storage Service,簡稱 OSS)提供基於網絡的數據存取服務。使用 OSS,可以通過網絡隨時存儲和調用包括文本、圖片、音頻和視頻等在內的各種非結構化數據文件。具有:1、易用性:簡單易用,便於管理,深度集成數據處理服務;2、高可靠:多重冗余備份,服務設計可用性不低於99.99%;3、強安全:多層次安全防護,支持跨區域復制、異地容災機制;4、低成本:總體TCO更低,生命周期管理進一步降低成本等特點。
在實現之前首先要購買阿里雲對象存儲OSS資源包並創建了Bucket。這里不詳細介紹,只介紹實現的代碼。
前端實現比較簡單,可以采用插件,有layui,bootstrap-fileinput等優秀插件,這里使用layui。
前端代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>upload</title>
<link rel="stylesheet" href="/static/build/layui.css" media="all">
</head>
<body>
<button type="button" class="layui-btn" id="test1">
<i class="layui-icon"></i>上傳圖片
</button>
<script src="/static/build/layui.js"></script>
<script>
layui.use('upload', function(){
var upload = layui.upload;
//執行實例
var uploadInst = upload.render({
elem: '#test1' //綁定元素
,url: '/upload/' //上傳接口
,done: function(res){
//上傳完畢回調,拿到路徑(res.data)自己選擇是在頁面顯示圖片還是顯示路徑。
}
,error: function(){
//請求異常回調,自己根據需求來寫錯誤提示以及下一步邏輯。
}
});
});
</script>
</body>
</html>
后端接口:
@RequestMapping(value="/upload")
@ResponseBody
public JsonResult upload(MultipartFile file, HttpServletRequest request) {
if (!file.isEmpty()) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
// 生成文件名稱
String nameSuffix = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."))
.replaceAll(" ", "_").replaceAll(",", "") + format.format(DateUtil.date())
+ new Random().nextInt(1000);
//上傳原始圖片到阿里雲
String uploadPath = ossFileUtil.uploadAliyun(file,nameSuffix);
return new JsonResult(true, "上傳成功",uploadPath);
} catch (Exception e) {
log.error("上傳附件錯誤" + e.getMessage());
return new JsonResult(false, "系統未知錯誤");
}
} else {
return new JsonResult(false, "文件不能為空");
}
}
JsonResult工具類:
public class JsonResult {
private boolean flag;
private String msg;
private Object data;
public JsonResult() {
super();
}
public JsonResult(boolean flag, String msg) {
super();
this.flag = flag;
this.msg = msg;
}
public JsonResult(boolean flag, String msg, Object data) {
super();
this.flag = flag;
this.msg = msg;
this.data = data;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
上傳圖片到阿里雲工具類:
<!-- 阿里雲oss --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
public class ossFileUtil {
public String uploadAliyun(MultipartFile file,String fileName) throws IOException {
// 1 獲取上傳需要的固定值
String endpoint ="oss-cn-shanghai.aliyuncs.com"; //你的站點
String accessKeyId = "<yourAccessKeyId>"; //你的acess_key_id
String accessKeySecret = "<yourAccessKeySecret>"; //你的acess_key_secret
String bucketName = "<yourBucketName>"; //你的bucket_name
//外面獲取文件輸入流,最后方便關閉
InputStream in = file.getInputStream();
try {
//2 創建OssClient對象
OSS ossClient =new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
//3 獲取文件信息,為了上傳
// meta設置請求頭
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType("image/jpg");
//4 設置知道文件夾
ossClient.putObject(bucketName,fileName,in, meta);
//5 關閉ossClient
ossClient.shutdown();
//6 返回上傳之后地址,拼接地址
String uploadUrl = "https://"+bucketName+"."+endpoint+"/"+fileName;
return uploadUrl;
}catch(Exception e) {
e.printStackTrace();
return null;
}finally {
in.close();
}
}
}
