aliyun 实现文件上传

aliyun 实现文件上传


1、添加 aliyun 对象存储相关依赖

 <!-- 阿里云 OSS 对象存储相关依赖 -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.3</version>
</dependency>

2、在 aliyun 平台上面提前开通 OSS 对象存储服务, 并在对象存储的 bucket 列表中创建 bucket, 存储少量文件不会收费

2.1、获取 bucketName
在这里插入图片描述2.2、获取 endpoint
在这里插入图片描述
2.3、获取 accessKeyId 和 accessKeySecret

在这里插入图片描述
3、如果你在微服务中使用该业务, nacos 远程配中心的相关配置,; 只是在 SpringBoot 中简单使用则忽略这一步

oss:
  endpoint: your Endpoint
  accessKeyId: your accessKeyId
  accessKeySecret: your accessKeySecret
  bucketName: your bucketName

4、属性配置类(微服务中使用这种方式)

@Getter
@Setter
@ConfigurationProperties(prefix = "oss")
public class OSSProperties {
    
    

    
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

属性配置类(SpringBoot 中简单使用, 选择下面这种方式)

@Getter
@Setter
public class OSSProperties {
    
    

    @Value("your endpoint")
    private String endpoint;
    
    @Value("your accessKeyId")
    private String accessKeyId;
    
    @Value("your accessKeySecret")
    private String accessKeySecret;
    
     @Value("your bucketName")
    private String bucketName;
}

OSS 配置类

@Configuration
@EnableConfigurationProperties(OSSProperties.class)
public class OSSConfig {
    
    

    @Autowired
    private OSSProperties properties;

    @Bean(destroyMethod = "shutdown")
    public OSS ossClient() {
    
    
        return new OSSClient(properties.getEndpoint(), properties.getAccessKeyId(), properties.getAccessKeySecret());
    }
}

5、文件上传下载的工具类, OSSUtils 工具类中使用的 SpringUtils 获取 bean 对象的工具方法, 请参照 Spring bean的工具类

/**
 * 需求: 当前类中有方法需要获取 Spring 容器中的对象. 但是该类无法交给 Spring 容器管理
 */
public class OSSUtils {
    
    

    public static String uploadFile(String path, MultipartFile file) {
    
    
        // 从 Spring 容器中获取对象
        OSS ossClient = SpringUtils.getBean("ossClient", OSS`class);
        OSSProperties properties = SpringUtils.getBean(OSSProperties.class);

        String filename = UUID.randomUUID().toString().replaceAll("-", "");
        try {
    
    
            // 获取原始文件名
            String originalFilename = file.getOriginalFilename();
            String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);

            filename = path + "/" + filename + "." + suffix;

            InputStream inputStream = file.getInputStream();
            // 简单类型的文件上传
            ossClient.putObject(properties.getBucketName(), filename, inputStream);
            // http://cd-wolf2w-cloud.oss-cn-chengdu.aliyun.com/xxx.jpg
            return "https://" + properties.getBucketName() + "." + properties.getEndpoint() + "/" + filename;
        } catch (Exception e) {
    
    
            e.printStackTrace();
            return null;
        }
    }
}

6、在Controller控制层调用业务方法, AjaxResult 统一结果响应处理对象请参照 MyBatis Plus 实现简单分页(拓展性强)

@PostMapping("/uploadImg")
public AjaxResult<?> uploadImg(MultipartFile upload) {
    
    

    // 图片的原始名字
    String originalFilename = upload.getOriginalFilename();

    String url = OSSUtils.uploadFile("images", upload);

    return AjaxResult.success()
        .put("fileName", originalFilename)
        .put("uploaded", 1)
        .put("url", url);
}

7、上传成功之后, 就可以在 bucket 列表中查看自己上传成功的文件了

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49137820/article/details/128439135