Java實現簡單上傳圖片到阿里雲對象存儲OSS


阿里雲對象存儲服務(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">&#xe67c;</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();
		}
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM