• Springboot整合阿里云OSS进行上传单个图片,多个图片,删除图片功能


    1. 导入OSS依赖

    1. com.aliyun.oss
    2. aliyun-sdk-oss
    3. 3.10.2

    2. 进行OSS配置

    1. package com.example.sushe.util;
    2. import com.aliyun.oss.OSS;
    3. import com.aliyun.oss.OSSClientBuilder;
    4. import org.springframework.beans.factory.annotation.Value;
    5. import org.springframework.stereotype.Component;
    6. import org.springframework.web.multipart.MultipartFile;
    7. import java.util.ArrayList;
    8. import java.util.Date;
    9. import java.util.List;
    10. import java.util.UUID;
    11. @Component
    12. public class Ossutil2 {
    13. @Value("${aliyun.oss.accessKeyId}")
    14. private String accessKeyId;
    15. @Value("${aliyun.oss.accessKeySecret}")
    16. private String secretAccessKey;
    17. @Value("${aliyun.oss.endpoint}")
    18. private String endPoint;
    19. @Value("${aliyun.oss.bucketName}")
    20. private String bucketName;
    21. public String uploadOneFile(MultipartFile file) {
    22. if (!(file.getOriginalFilename().endsWith(".png")) && !(file.getOriginalFilename().endsWith(".jpg")) && !(file.getOriginalFilename().endsWith(".PNG"))) {
    23. try {
    24. throw new Exception("文件类型错误,只能为png或者jpg");
    25. } catch (Exception e) {
    26. throw new RuntimeException(e);
    27. }
    28. }
    29. // 创建OSSClient实例。
    30. OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
    31. //设置文件名
    32. String fileName = new Date()
    33. + UUID.randomUUID().toString().replace("-", "")
    34. + file.getOriginalFilename();
    35. try {
    36. // 创建PutObject请求。
    37. ossClient.putObject(bucketName, fileName, file.getInputStream());
    38. String url = "http://" + bucketName + "." + endPoint + "/" + fileName;
    39. // System.out.println(url);
    40. return url;
    41. } catch (Exception e) {
    42. e.printStackTrace();
    43. return null;
    44. } finally {
    45. if (ossClient != null) {
    46. ossClient.shutdown();
    47. }
    48. }
    49. }
    50. public List uploadArrayFile(MultipartFile[] files) {
    51. // 创建OSSClient实例。
    52. OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
    53. List list = new ArrayList<>();
    54. try {
    55. //设置文件名
    56. for (MultipartFile file : files) {
    57. String fileName = new Date()
    58. + UUID.randomUUID().toString().replace("-", "")
    59. + file.getOriginalFilename();
    60. // 创建PutObject请求。
    61. ossClient.putObject(bucketName, fileName, file.getInputStream());
    62. String url = "http://" + bucketName + "." + endPoint + "/" + fileName;
    63. // System.out.println(url);
    64. list.add(url);
    65. }
    66. } catch (Exception e) {
    67. e.printStackTrace();
    68. return null;
    69. } finally {
    70. if (ossClient != null) {
    71. ossClient.shutdown();
    72. }
    73. }
    74. return list;
    75. }
    76. public boolean deleteFile(String fileUrl) {
    77. // 创建OSSClient实例。
    78. OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
    79. /** oss删除文件是根据文件完成路径删除的,但文件完整路径中不能包含Bucket名称。
    80. * 比如文件路径为:http://edu-czf.oss-cn-guangzhou.aliyuncs.com/2022/08/abc.jpg",
    81. * 则完整路径就是:2022/08/abc.jpg
    82. */
    83. int begin = ("http://" + bucketName + "." + endPoint + "/").length(); //找到文件路径的开始下标
    84. String deleteUrl = fileUrl.substring(begin);
    85. try {
    86. // 删除文件请求
    87. ossClient.deleteObject(bucketName, deleteUrl);
    88. return true;
    89. } catch (Exception e) {
    90. e.printStackTrace();
    91. return false;
    92. } finally {
    93. if (ossClient != null) {
    94. ossClient.shutdown();
    95. }
    96. }
    97. }
    98. }

    3. 在application.yml 进行阿里云配置

    1. aliyun:
    2. oss:
    3. endpoint: ************** Endpoint(地域节点)
    4. accessKeyId: ************ 使用子账户进行管理,输入子账户密钥
    5. accessKeySecret: ********** 子账户密码
    6. bucketName: ******** 创建的bucker名字

    4. 创建OSSController

    1. // /api/oss/fileUpload
    2. @RestController
    3. @RequestMapping("/oss")
    4. public class OSSController {
    5. @Autowired
    6. private OssUtil ossUtil;
    7. @Autowired
    8. private Ossutil2 ossutil2;
    9. // @PostMapping("/file")
    10. // public String uploadFile(MultipartFile file) throws IOException {
    11. //
    12. // // 获取文件名
    13. // String fileName = file.getOriginalFilename();
    14. // InputStream inputStream =file.getInputStream();
    15. // int userId = 2;
    16. // String url = ossUtil.addFileStream("carry_head_portrait", userId + ".png", inputStream);
    17. // return url;
    18. // }
    19. @PostMapping("/uploadOneFile")
    20. public String uploadFile(MultipartFile file) {
    21. //返回上传oss的url
    22. return ossutil2.uploadOneFile(file);
    23. }
    24. @PostMapping("uploadArrayFile")
    25. public List uploadArrayFile(MultipartFile[] files) {
    26. //返回上传oss的url
    27. return ossutil2.uploadArrayFile(files);
    28. }
    29. @PostMapping("deleteFile")
    30. public boolean deleteFile( String fileUrl) {
    31. //返回是否删除成功
    32. return ossutil2.deleteFile(fileUrl);
    33. }
    34. }

    5. 使用postman进行测试

    http://localhost:8080/sushe/oss/uploadOneFile

    请求方式: post

    格式: from-data

    key:传输的参数名

    value:上传的文件 

    请求成功就会返回图片所在阿里云云存储器地址

  • 相关阅读:
    Gitee的注册和代码提交
    聚美优品API 根据关键词取商品列表 Onebound电商平台数据
    使用MotionLayout实现模拟启动页动画和轮播图
    套接字属性设置
    Vue3搭配Element Plus 实现候选搜索框效果
    iOS NSFileManager获取设备硬盘剩余可用容量不准确问题
    Docker 容器监控 - Weave Scope
    cad怎么转换成pdf格式黑白?
    Go 反射
    Rockland丨艾美捷Rockland大鼠γ-球蛋白说明书
  • 原文地址:https://blog.csdn.net/weixin_55347789/article/details/133771997