图片存储解决方案---阿里云OSS

实现图片上传服务,方案:

  1. 直接将图片保存到服务所在的硬盘

    1. 优点:开发便捷,成本低

    2. 缺点:扩容困难

  2. 使用分布式文件系统进行存储

    1. 优点:容易实现扩容

    2. 缺点:部署复杂、开发复杂度稍大(有成熟的产品可以使用,比如:FastDFS)

  3. 使用第三方的存储服务

    1. 优点:开发简单,拥有强大功能,免维护

    2. 缺点:付费

对象存储OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,提供12个9的数据持久性,99.995%的数据可用性和多种存储类型,适用于数据湖存储,数据迁移,企业数据管理,数据处理等多种场景,可对接多种计算分析平台,直接进行数据处理与分析,打破数据孤岛,优化存储成本,提升业务价值。https://www.aliyun.com/product/oss

1、导入依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.0.6</version>
</dependency>

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

 2、Propeties 属性类

@Data
@ConfigurationProperties(prefix = "oss")// 指定yml文件全路径,获取属性
public class OssProperties {

    private String accessKey;
    private String secret;
    private String bucketName;
    private String url;
    private String Endpoint;
}

3、定义模板类

public class OssTemplate {

    private OssProperties properties;

    public OssTemplate(OssProperties properties) {
        this.properties = properties;
    }
    
    /**
     * 文件上传到阿里云OSS
     * @param fileName 上传文件名
     * @param inputStream 文件输入流
     * @return 图片的访问地址
     */
    public String upload(String fileName, InputStream inputStream) {

        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = properties.getEndpoint();
        // 阿里云主账号AccessKey拥有所有API的访问权限
        String accessKeyId = properties.getAccessKey();
        String accessKeySecret = properties.getSecret();
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        //获取上传后缀名
        String sufix = fileName.substring(fileName.lastIndexOf("."));
        /**
         * 文件名称:
         *   images/2020/10/31/uuid(格式)
         * 拼接图片名称如下:
         */
        String name = "images/"+new SimpleDateFormat("yyyy/MM/dd").format(new Date()) +"/"
                + UUID.randomUUID().toString() + sufix;
        ossClient.putObject(properties.getBucketName(), name, inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();

        return "https://" + properties.getUrl() + "/" + name;
    }

}

4、自动配置类

@Configuration
// 自动的读取yml中配置信息,并赋值到OssProperties对象中,将此对象存入容器
@EnableConfigurationProperties({   
        OssProperties.class
})
public class TanhuaAutoConfiguration {


    @Bean
    public OssTemplate ossTemplate(OssProperties ossProperties) {
        return new OssTemplate(ossProperties);
    }
}

5、application.yml配置

# 阿里云oss上的信息
oss:
    accessKey: 
    secret: 
    bucketName: 
    endpoint: 
    url: 

测试:

/**
 * 测试文件上传
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class OssTest {

    @Autowired
    private OssTemplate ossTemplate;

    @Test
    public void testSendMsg() throws FileNotFoundException {
        String file = "D:\\123.jpg";// 图片的路径
        String url = ossTemplate.upload(file, new FileInputStream(file));
        System.out.println("url = " + url);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值