image.png
    接口 OssService:

    1. package com.wzy.oss.service;
    2. import org.springframework.stereotype.Service;
    3. import org.springframework.web.multipart.MultipartFile;
    4. @Service
    5. public interface OssService {
    6. String uploadFileAvatar(MultipartFile file);
    7. }

    实现类 OssServiceImpl:

    1. package com.wzy.oss.service.impl;
    2. import com.aliyun.oss.OSS;
    3. import com.aliyun.oss.OSSClientBuilder;
    4. import com.wzy.oss.service.OssService;
    5. import com.wzy.oss.utils.ConstanPropertiesUtils;
    6. import org.joda.time.DateTime;
    7. import org.springframework.stereotype.Service;
    8. import org.springframework.web.multipart.MultipartFile;
    9. import java.io.IOException;
    10. import java.io.InputStream;
    11. import java.util.UUID;
    12. @Service
    13. public class OssServiceImpl implements OssService {
    14. /*
    15. * @description 以下是长传头像的代码,根据 https://help.aliyun.com/document_detail/84781.html 中
    16. * <简单上传>中的<上传文件流>。
    17. * @author WangZiyao
    18. * @date 2021/9/20 0020 15:42
    19. * @param [org.springframework.web.multipart.support.MultipartFilter]
    20. * @return java.lang.String
    21. */
    22. @Override
    23. public String uploadFileAvatar(MultipartFile file) {
    24. //1、通过工具类 ConstanPropertiesUtils 获取对应的属性的值。
    25. String endpoint = ConstanPropertiesUtils.END_POINT;
    26. String accessKeyId = ConstanPropertiesUtils.KEY_ID;
    27. String accessKeySecret = ConstanPropertiesUtils.KEY_SECRET;
    28. String bucketName = ConstanPropertiesUtils.BUCKET_NAME;
    29. try {
    30. // 2、创建OSSClient实例。
    31. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    32. //获取文件输入流
    33. InputStream inputStream = file.getInputStream();
    34. //与 <文件名 fileName> 拼接,构成唯一值,使上传的文件名不会因重复,从而被覆盖。
    35. String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    36. //获取上传文件的名称,与 uuid 拼接构成唯一名称。
    37. String fileName = uuid + file.getOriginalFilename();
    38. //把文件按照日期进行分类
    39. //使用pom中的 joda-time 时间依赖,
    40. //获取时间,并转换为 2021/09/20 的格式
    41. String dataPath = new DateTime().toString("yyyy/MM/dd");
    42. //2021/09/20/822d4669bf51484c9e5b664ce550c8da刘亦菲.jpg
    43. fileName = dataPath + "/" + fileName;
    44. // 1、依次填写 Bucket名称(例如examplebucket):bucketName
    45. // 和Object完整路径或文件名称(例如exampledir/exampleobject.txt)。:filename
    46. // Object完整路径中不能包含Bucket名称。
    47. ossClient.putObject(bucketName, fileName, inputStream);
    48. // 关闭OSSClient。
    49. ossClient.shutdown();
    50. //返回图片路径
    51. //https://myedu1010.oss-cn-hangzhou.aliyuncs.com/射手.jpg
    52. String pictureUrl = "https://" + bucketName + "." + endpoint + "." + "/" + fileName;
    53. return pictureUrl;
    54. } catch (IOException e) {
    55. e.printStackTrace();
    56. return null;
    57. }
    58. }
    59. }