⭐️写在前面
这里是温文艾尔の学习之路
- 如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ
- 博客主页 温文艾尔の学习小屋
- ⭐️更多文章请关注温文艾尔主页
- 文章发布日期:2021.12.29
- java学习之路!
- 欢迎各位点赞评论收藏⭐️
- 新年快乐朋友们
- jvm学习之路!
- ⭐️上一篇内容:【JVM】JVM03(图解垃圾回收机制)上
起因:在遇到上传下载图片以及其他资源问题的时候,我选择的是将图片上传到我自己的云服务器上,按时间图片类型分好类,这样可以对图片进行正常的管理,但是代价来了,服务器内存太小(我的是学生机),如果这么操作下去服务器会”不堪其重“,故我选择了一种替代方案<使用阿里云对象存储OSS服务>来对这些资源进行管理
阿里云OSS是一种很好的针对存储的解决方案,在实际开发中也有许多公司使用该服务
阿里云官网
1.1申请阿里云账号
1.2实名认证
1.3开通“对象存储OSS”服务
前两步比较简单,是注册与实名认证,我们直接略过进行第三步开通服务
如果我们存储量比较小,在1GB之下是不收费的,不过最好还是往阿里云存个一两块钱以防不测
我们进入管理控制台,创建Bucket
地域默认选择即可,地域的选择会影响下面的地域节点Endpoint
存储类型
这里根据存储的文件风格进行选择
启用同城冗余存储代表在此区域的文件将会备份,开通同城冗余存储会收费
读写权限
选择公共读即可
服务器加密方式和实时日志查询选择<无>和<不开通>即可
我们可以在Bucket列表中刚查看已创建的Bucket信息
我们使用控制台上传一张图片试一下
上传成功oss会帮我们生成访问地址,可以对图片进行下载
只有拿到了阿里云颁发id和秘钥我们才可以继续操作
进行验证即可获得,获得之后最好保存一下,如果遗忘的话再寻找秘钥又会需要验证很麻烦
阿里云开发文档
<dependencies>
<dependency>
<groupId>com.aliyun.ossgroupId>
<artifactId>aliyun-sdk-ossartifactId>
<version>3.10.2version>
dependency>
<dependency>
<groupId>joda-timegroupId>
<artifactId>joda-timeartifactId>
<version>2.10.1version>
dependency>
dependencies>
application.properties
#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket
aliyun.oss.file.bucketname=wenwenaier-file
工具类ConstantPropertiesUtils:读取配置文件中的内容
package com.wql.oss.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* Description
* User:
* Date:
* Time:
*/
@Component
public class ConstantPropertiesUtils implements InitializingBean {
//读取配置文件中的内容
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
//读取配置文件中的内容
@Value("${aliyun.oss.file.keyid}")
private String keyId;
//读取配置文件中的内容
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
//读取配置文件中的内容
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
OssController
package com.wql.oss.controller;
import com.wql.commonutils.RespBean;
import com.wql.oss.service.OssService;
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.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* Description
* User:
* Date:
* Time:
*/
@RestController
@RequestMapping("/eduoss/fileoss")
public class OssController {
@Autowired
private OssService ossService;
//上传图片
@PostMapping("/upload")
public RespBean uploadOssFile(MultipartFile file){
//返回上传到oss的路径
String url = ossService.uploadFileAvatar(file);
return RespBean.ok().data("url",url);
}
}
OssService
package com.wql.oss.service;
import org.springframework.web.multipart.MultipartFile;
/**
* Description
* User:
* Date:
* Time:
*/
public interface OssService {
String uploadFileAvatar(MultipartFile file);
}
OssServiceImpl
package com.wql.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.wql.oss.service.OssService;
import com.wql.oss.utils.ConstantPropertiesUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Description
* User:
* Date:
* Time:
*/
@Service
public class OssServiceImpl implements OssService {
/**
* 上传文件到oss
* @param file
* @return
*/
@Override
public String uploadFileAvatar(MultipartFile file) {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = ConstantPropertiesUtils.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
OSS ossClient = null;
String url = "";
try {
// 创建OSSClient实例。
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 获得文件输入流
InputStream inputStream = file.getInputStream();
/**
* 第一个参数 Bucket名称
* 第二个参数 上传到oss中文件的路径及名称
* 第三个参数 上传文件输入流
*/
//构建文件路径
String fileDatePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String fileName = file.getOriginalFilename();
String filePath = fileDatePath+"/"+fileName;
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType("image/jpg");
ossClient.putObject(bucketName, filePath, inputStream,meta);
//拼接路径
url = "https://"+bucketName+"."+endpoint+"/"+filePath;
return url;
}catch (Exception e){
e.printStackTrace();
return null;
}finally {
// 关闭OSSClient。
ossClient.shutdown();
}
}
}
https://wenwenaier-file.oss-cn-beijing.aliyuncs.com/2022-01-27/圣诞.jpg
上传成功!