700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 图片存储阿里云oss

图片存储阿里云oss

时间:2019-12-24 01:13:47

相关推荐

图片存储阿里云oss

阿里云oss存储

在开发中我们很经常遇见需要上传图片的功能,图片上传功能开发简单,但问题是我们一般把图片存在到哪里呢?

有下面几种解决方案

1.直接将图片保存到服务的硬盘

优点:开发简捷,成本低缺点:扩容难

2.使用分布式文件系统进行存储(比如fastDfs)

优点:容易实现扩容缺点:开发复杂度稍大(尤其是开发复杂的功能)

3.使用nfs做存储(没操作过)

优点:开发较为便捷缺点:需要有一定的运维知识进行部署和维护

4.使用第三方的存储服务

优点:开发简单,拥有强大功能,免维护缺点:付费

今天要练习的就是第四个,第三方存储服务(阿里云oss存储管理)

当然需要钱对吗,但还好不贵,为了技术白嫖不了啦哈哈哈。

购买自行操作吧我就跳过了。

开始使用oss

创建Bucket

使用OSS,首先需要创建Bucket,Bucket翻译成中文是水桶的意思,把存储的图片资源看做是水,想要盛水必须得有桶,就是这个意思了。

创建完bucket后然后选择bucket后就能看到url、消耗流量等

管理文件

创建一个maven工程并引入依赖如下:

引入依赖

<!--spring boot的支持--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.0.RELEASE</version></parent><dependencies><!--springboot的web支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.9.9</version></dependency><dependency><groupId>mons</groupId><artifactId>commons-lang3</artifactId></dependency></dependencies>

编写aliyun.properties配置文件

aliyun.endpoint = oss-cn-<youEndpoint>aliyun.accessKeyId = <youAccesskeyId>aliyun.accessKeySecret = <youAccesskeySecret>aliyun.bucketName = test-xxja<youBucketName>aliyun.urlPrefix = http://test-xxja.oss-cn-/ <youUrlprefix>

编写PicUploadResult

package com.xxja.oss.vo;import lombok.Data;@Datapublic class PicUploadResult {// 文件唯一标识private String uid;// 文件名private String name;// 状态有:uploading done error removedprivate String status;// 服务端响应内容,如:'{"status": "success"}'private String response;}

编写AliyunConfig

package com.xxja.oss.config;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClient;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;@Configuration@PropertySource(value = {"classpath:aliyun.properties"})@ConfigurationProperties(prefix = "aliyun")@Datapublic class AliyunConfig {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;private String urlPrefix;@Beanpublic OSS oSSClient() {return new OSSClient(endpoint, accessKeyId, accessKeySecret);}}

编写service

package com.xxja.oss.service;import com.aliyun.oss.OSS;import com.xxja.oss.config.AliyunConfig;import com.xxja.oss.vo.PicUploadResult;import mons.lang3.RandomUtils;import mons.lang3.StringUtils;import org.joda.time.DateTime;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import java.io.ByteArrayInputStream;import java.io.IOException;@Servicepublic class PicUploadService {// 允许上传的格式private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".gif", ".png"};@Autowiredprivate OSS ossClient;@Autowiredprivate AliyunConfig aliyunConfig;public PicUploadResult upload(MultipartFile uploadFile) {// 校验图片格式boolean isLegal = false;for (String type : IMAGE_TYPE) {if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {isLegal = true;break;}}// 封装Result对象,并且将文件的byte数组放置到result对象中PicUploadResult fileUploadResult = new PicUploadResult();if (!isLegal) {fileUploadResult.setStatus("error");return fileUploadResult;}// 文件新路径String fileName = uploadFile.getOriginalFilename();String filePath = getFilePath(fileName);// 上传到阿里云try {ossClient.putObject(aliyunConfig.getBucketName(), filePath, new ByteArrayInputStream(uploadFile.getBytes()));} catch (IOException e) {e.printStackTrace();//上传失败fileUploadResult.setStatus("error");return fileUploadResult;}fileUploadResult.setStatus("done");fileUploadResult.setName(this.aliyunConfig.getUrlPrefix() + filePath);fileUploadResult.setUid(String.valueOf(System.currentTimeMillis()));return fileUploadResult;}/*** 文件路径* @param sourceFileName* @return*/private String getFilePath(String sourceFileName) {DateTime dateTime = new DateTime();return "image/" + dateTime.toString("yyyy")+ "/"+dateTime.toString("MM")+"/" +dateTime.toString("dd") + "/" +System.currentTimeMillis() +RandomUtils.nextInt(100, 9999) + "." + StringUtils.substringAfterLast(sourceFileName, ".");}}

编写controller

package com.xxja.oss.controller;import com.xxja.oss.service.PicUploadService;import com.xxja.oss.vo.PicUploadResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;@RequestMapping("pic/upload")@RestControllerpublic class PicUploadController {@Autowiredprivate PicUploadService picUploadService;@PostMappingpublic PicUploadResult upload(@RequestParam("file") MultipartFile uploadFile) {return this.picUploadService.upload(uploadFile);}}

编写启动类

package com.xxja.oss;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class OssTestApplication {public static void main(String[] args) {SpringApplication.run(OssTestApplication.class, args);}}

启动

使用postman访问

上传成功。

访问路径

这出现了一个问题。就是访问路径的时候是下载

点击详情。保留一个最新的把其他的都删了

默认是image/jpeg,改为image/jpg

访问路径为

https://test-xxja.oss-cn-/image//12/29/16092302557854125.jpg

注意是https不是http哦

ok,访问成功,简单就是需要钱吧。再接再厉加油!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。