image.png

1、开通阿里云OSS

1.1进入阿里云官网,点击【产品】,选择【阿里云OSS】

image.png

1.2来到阿里云OSS页面

image.png
点击立即开通
image.png
勾选服务协议,点击【立即开通】
image.png

1.3成功开通阿里云OSS

image.png

开通完成之后,邮箱就会收到开通成功的邮件
image.png

2、使用阿里云OSS

2.1开通完成之后,来到【OSS管理控制台】

image.png

2.2创建Bucket【存储空间】

image.png

2.2.1填入相关信息

image.png

image.png

2.2.2存储空间创建好了

image.png

2.3上传文件测试一下

image.png
上传成功
image.png
找到文件管理,预览一下刚才上传的照片
image.png
OK 手动上传文件成功!

3、博客项目整合阿里云OSS

3.1找到OSS的开发文档

image.png在SDK示例中找到Java开发文档
image.png

3.2博客项目引入OSS依赖

复制依赖,粘贴到博客项目的pom文件中

  1. <dependency>
  2. <groupId>com.aliyun.oss</groupId>
  3. <artifactId>aliyun-sdk-oss</artifactId>
  4. <version>3.10.2</version>
  5. </dependency>

image.png

3.3编写OSS文件上传工具类

image.png

  1. // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  2. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  4. String accessKeyId = "yourAccessKeyId";
  5. String accessKeySecret = "yourAccessKeySecret";
  6. // 填写Bucket名称,例如examplebucket。
  7. String bucketName = "examplebucket";
  8. // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
  9. String objectName = "exampledir/exampleobject.txt";
  10. // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
  11. // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
  12. String filePath= "D:\\localpath\\examplefile.txt";
  13. // 创建OSSClient实例。
  14. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  15. try {
  16. InputStream inputStream = new FileInputStream(filePath);
  17. // 创建PutObject请求。
  18. ossClient.putObject(bucketName, objectName, inputStream);
  19. } catch (OSSException oe) {
  20. System.out.println("Caught an OSSException, which means your request made it to OSS, "
  21. + "but was rejected with an error response for some reason.");
  22. System.out.println("Error Message:" + oe.getErrorMessage());
  23. System.out.println("Error Code:" + oe.getErrorCode());
  24. System.out.println("Request ID:" + oe.getRequestId());
  25. System.out.println("Host ID:" + oe.getHostId());
  26. } catch (ClientException ce) {
  27. System.out.println("Caught an ClientException, which means the client encountered "
  28. + "a serious internal problem while trying to communicate with OSS, "
  29. + "such as not being able to access the network.");
  30. System.out.println("Error Message:" + ce.getMessage());
  31. } finally {
  32. if (ossClient != null) {
  33. ossClient.shutdown();
  34. }
  35. }
  36. }

3.4其中需要的OSS参数有如下

点击右上角头像有个AccessKey管理image.png
选择子用户AccessKey管理
image.png
进入管理页面
image.png
创建一个博客系统的子用户AccessKey
image.png
点击确定 有个安全验证
image.png
用手机验证码验证一下就行
image.png
创建成功
给子账户只赋予OSS的读写权限
image.png

3.5设置跨域规则

image.png

image.png
设置跨域请求完成

4、编写OSS文件上传工具类

参考SDK开发文档快速入门
image.png
备注:阿里云账号AccessKey相关内容已经封装

  1. public class OssUtil {
  2. public static String uploadOSS(MultipartFile multipartFile) {
  3. // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  4. String endpoint = OssParam.ENDPOINT;
  5. // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  6. String accessKeyId = OssParam.ACCESS_KEY_ID;
  7. String accessKeySecret = OssParam.ACCESS_KEY_SECRET;
  8. // 填写Bucket名称
  9. String bucketName = OssParam.BUCKET_NAME;
  10. // 创建OSSClient实例。
  11. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  12. try {
  13. // 获取文件上传的流
  14. InputStream inputStream = multipartFile.getInputStream();
  15. // 获取文件名称
  16. String originalFilename = multipartFile.getOriginalFilename();
  17. // 文件后缀
  18. String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
  19. // 新文件名称
  20. String newFileName = UUID.randomUUID().toString() + suffix;
  21. // 文件上传到阿里云OSS服务器
  22. ossClient.putObject(bucketName, newFileName, inputStream);
  23. // 返回阿里云文件保存路径
  24. return "https://" + bucketName + "." + endpoint + "/" + newFileName;
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. return "文件上传失败";
  28. } finally {
  29. // 关闭 ossClient
  30. ossClient.shutdown();
  31. }
  32. }
  33. }

image.png
该工具类支持文件上传到阿里云OSS,并返回图片地址

5、测试文件上传功能

  1. @RestController
  2. @RequestMapping("/blog")
  3. public class BlogController {
  4. //获取日志记录器对象
  5. private final Logger logger = Logger.getLogger(BlogController.class);
  6. /**
  7. * 文件上传
  8. * @param file
  9. * @return
  10. */
  11. @GetMapping("/fileUpload")
  12. public String fileUpload(@RequestParam("file") MultipartFile file) {
  13. logger.info("文件上传");
  14. return OssUtil.uploadOSS(file);
  15. }
  16. }

ApiPost测试文件上传
image.png
可以成功上传,并返回文件地址
https://yangcunle-blog.oss-cn-hangzhou.aliyuncs.com/161c0548-f1d3-4346-9a5c-31d720ce6835.png
image.png
图片可以正常下载了 O(∩_∩)O哈哈~