日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图片存储解决方案--阿里云OSS

發(fā)布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片存储解决方案--阿里云OSS 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

圖片存儲解決方案

實現(xiàn)圖片上傳服務,需要有存儲的支持,那么我們的解決方案將以下幾種:

直接將圖片保存到服務的硬盤優(yōu)點:開發(fā)便捷,成本低缺點:擴容困難 使用分布式文件系統(tǒng)進行存儲優(yōu)點:容易實現(xiàn)擴容缺點:開發(fā)復雜度稍大(有成熟的產(chǎn)品可以使用,比如:FastDFS) 使用nfs做存儲優(yōu)點:開發(fā)較為便捷缺點:需要有一定的運維知識進行部署和維護 使用第三方的存儲服務優(yōu)點:開發(fā)簡單,擁有強大功能,免維護缺點:付費

阿里云OSS存儲

1 什么是OSS服務?

地址:https://www.aliyun.com/product/oss

2、購買服務

使用第三方服務最大的缺點就是需要付費,下面,按照自己的需求購買即可。

3、創(chuàng)建Bucket

使用OSS,首先需要創(chuàng)建Bucket,Bucket翻譯成中文是水桶的意思,把存儲的圖片資源看做是水,想要盛水必須得有桶,就是這個意思了。

以下步驟可以查看阿里云的視頻教學:

https://help.aliyun.com/learn/learningpath/oss.html?spm=5176.11888651.1190625.4.44623a4cD6hbPy

進入控制臺,https://oss.console.aliyun.com/overview

選擇Bucket后,即可看到對應的信息,如:url、消耗流量等 :

文件管理:

4、創(chuàng)建用戶

眾多產(chǎn)品,一般采用子賬號進行分配權(quán)限,防止越權(quán)攻擊

創(chuàng)建用戶的方式與短信接口中的方式一樣,創(chuàng)建完用戶之后需要設置oss權(quán)限。


務必保存好這兩個數(shù)據(jù) 因為此頁面一旦刷新,就再也查不到此用戶的的AccessKey ID和 AccessKey Secret,除法將這個用戶刪除 再重新創(chuàng)建用戶。

為新建用戶授權(quán)OSS全部權(quán)限

設置oss權(quán)限


阿里云OSS開發(fā)文檔

以上對于阿里云OSS基礎的準備工作已經(jīng)做好了,下面實現(xiàn)代碼部分

第一步
導?依賴

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.0</version> </dependency>

第二步
創(chuàng)建存儲空間

OSS配置-在配置文件當中進行配置

//第1項配置 aliyun.endpoint = http://*************** //第2項配置 aliyun.accessKeyId = *********** //第3項配置 aliyun.accessKeySecret = *************** //第4項配置 aliyun.bucketName= *************** //第5項配置 aliyun.urlPrefix=http://***************/

以上需要在代碼當中配置5項,我們來分別說下這5項代表的是什么:
第1項和第5項如下:

第2和第3項是我們新創(chuàng)建的個人用戶的accessKeyId和accessKeySecret
第4項就是我們創(chuàng)建的Bucket名稱

我們將這5項數(shù)據(jù)配置在代碼的配置文件aliyun.properties當中,通過配置類去加載這5項消息

配置類

@Configuration @PropertySource("classpath:aliyun.properties") @ConfigurationProperties(prefix = "aliyun") @Data public class AliyunConfig {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;private String urlPrefix;@Beanpublic OSSClient oSSClient() {return new OSSClient(endpoint, accessKeyId, accessKeySecret);}}

控制器:

@RequestMapping("pic/upload") @Controller public class PicUploadController {@Autowiredprivate PicUploadService picUploadService;@PostMapping@ResponseBodypublic PicUploadResult upload(@RequestParam("file") MultipartFile multipartFile) {return this.picUploadService.upload(multipartFile);} }

vo:

@Data public class PicUploadResult {// 文件唯一標識private String uid;// 文件名private String name;// 狀態(tài)有:uploading done error removedprivate String status;// 服務端響應內(nèi)容,如:'{"status": "success"}'private String response;}

service:

@Service public class PicUploadService {// 允許上傳的格式private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg",".jpeg", ".gif", ".png"};@Autowiredprivate OSSClient ossClient;@Autowiredprivate AliyunConfig aliyunConfig;public PicUploadResult upload(MultipartFile uploadFile) {PicUploadResult fileUploadResult = new PicUploadResult();//圖片做校驗,對后綴名boolean isLegal = false;//對上傳的圖片后綴名做校驗for (String type : IMAGE_TYPE) {if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(),type)) {isLegal = true;break;}}//不支持格式的上傳if (!isLegal) {fileUploadResult.setStatus("error");return fileUploadResult;}// 文件新路徑String fileName = uploadFile.getOriginalFilename();String filePath = getFilePath(fileName);// 上傳到阿里云try {// 目錄結(jié)構(gòu):images/2018/12/29/xxxx.jpgossClient.putObject(aliyunConfig.getBucketName(), filePath, new ByteArrayInputStream(uploadFile.getBytes()));} catch (Exception e) {e.printStackTrace();//上傳失敗fileUploadResult.setStatus("error");return fileUploadResult;}// 上傳成功fileUploadResult.setStatus("done");fileUploadResult.setName(this.aliyunConfig.getUrlPrefix() + filePath);//一般這個生成的id我們會將保存在數(shù)據(jù)庫當中fileUploadResult.setUid(String.valueOf(System.currentTimeMillis()));return fileUploadResult;}//創(chuàng)建文件新的路徑private String getFilePath(String sourceFileName) {DateTime dateTime = new DateTime();//images/yyyy/MM/dd/xxxxxxx.jpgreturn "images/" + dateTime.toString("yyyy")+ "/" + dateTime.toString("MM") + "/"+ dateTime.toString("dd") + "/" + System.currentTimeMillis() +RandomUtils.nextInt(100, 9999) + "." +StringUtils.substringAfterLast(sourceFileName, ".");}}

測試:

查看OSS服務器當中是否存在此圖片

總結(jié)

以上是生活随笔為你收集整理的图片存储解决方案--阿里云OSS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。