阿里巴巴OSS对象存储在java中使用(简单好用,一看就会)

阿里巴巴OSS对象存储在java中使用

阿里0ss简介

阿里云OSS(Object Storage Service,对象存储服务)是一种高可用、高可靠、海量、安全的云存储服务,可以帮助用户存储和管理海量非结构化数据,如图片、音频、视频等。

阿里云OSS提供了简单易用的API,可以方便地上传、下载、管理和分享数据。它还提供了多种数据存储类型和数据访问方式,以满足不同场景下的需求,如标准存储、低频访问存储、归档存储等。

阿里云OSS还具有高可用性和高可靠性,它采用了多副本存储和多机房容灾技术,确保数据的安全性和可用性。此外,阿里云OSS还提供了多种安全措施,如访问控制、数据加密等,保障用户数据的安全。

因此,阿里云OSS广泛应用于各种场景,如网站图片、视频、音频存储、备份和归档、大数据分析等。

使用背景

在进行电商后台上传图片,并且需要存储到数据库中,这里我们想到使用阿里oss云端存储,数据库只需要存储经过oss处理后返回给我们的图片的链接。

1.首先创建所需文件

请添加图片描述

注意:这里是创建的maven项目,手动改造成springboot项目。

2.pom文件以及applicat.yml等配置文件

这里我只放最主要的,其他的一些数据库相关,springboot相关pom配置这里就不列举了

<dependency>
   <groupId>com.aliyun.oss</groupId>
   <artifactId>aliyun-sdk-oss</artifactId>
   <version>3.15.1</version>
</dependency>
 <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
 </dependency>
server:
  port: 8081
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///db_cloudgp
    username: ****
    password: *******

  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
3.实体层
@Data
@TableName("t_alioss")
@NoArgsConstructor
public class Alioss {
    //序号,主键
    @TableId(type = IdType.AUTO)
    private Integer id;
    //存储空间名称
    private String bucket;
    //对象名
    private String objname;
    //类型:1.图片 2.视频
    private Integer type;
    //创建时间
    private Date ctime;
    //访问地址
    private String url;
    //访问地址的结束时间
    private Date etime;

    public Alioss(String bucket, String objname, Integer type, String url, Date etime) {
        this.bucket = bucket;
        this.objname = objname;
        this.type = type;
        this.url = url;
        this.etime = etime;
    }
}

这里需要按照实体层字段手动创建数据库。

4.第三方工具包
阿里oss工具代码封装
public class AliOssUtil {
    private static final String endpoint = "https://oss-cn-beijing.aliyuncs.com";
// 进入阿里oss获取产品key值
    private static final String accessKeyId = "L**********czMQ";
// key值对应密码
    private static final String accessKeySecret = "K1*************uChXoj8";
// 存储上传文件的容器
    public static final String BUCKET="**********";

    private static OSS client;
    static {
        client = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
    }

    /**
     * 创建储存空间名称
     * @param name 创建存储空间名称
     * @return
     */
    public static boolean create(String name) {
        CreateBucketRequest createBucketRequest = new CreateBucketRequest(name);

        Bucket bucket = client.createBucket(createBucketRequest);
        return bucket!=null;
    }

    /**
     * 实现文件上传
     * @param bucket 存储空间名称
     * @param obj 存储对象名称,带文件后缀
     * @param data 文件内容
     * @return
     */
    public static boolean upload(String bucket,String obj, byte[] data) {
        PutObjectRequest request = new PutObjectRequest(bucket, obj, new ByteArrayInputStream(data));
        request.setProcess("true");
        PutObjectResult result=client.putObject(request);
        return result.getResponse().getStatusCode()==200;
    }

    /**
     * 创建访问链接
     * @param bucket 存储空间名称
     * @param obj 存储对象名称,带文件名后缀
     * @param etime 访问地址的失效时间
     * @return 访问地址
     */
    public static String createUrl(String bucket, String obj,Date etime){
        return client.generatePresignedUrl(bucket, obj, etime).toString();
    }

    /**
     * 删除文件
     * @param bucket 存储空间名称
     * @param obj 存储对象名称,带文件后缀
     */
    public static void deFile(String bucket,String obj){
        client.deleteObject(bucket, obj);
    }

进入阿里oss链接:对象存储 OSS_云存储服务_企业数据管理_存储-阿里云 (aliyun.com)

这里需要自己扫码登陆,新人用户可以免费使用三个月,创建key需要实名认证。

文件名处理工具封装
public class FileUtil {
    /**
     * 实现文件名的重命名和限长*/
    public static String rename(String fn){
        if(fn.length()>50){
            fn=fn.substring(fn.length()-50);
        }
        return System.currentTimeMillis()+"-"+new Random().nextInt(10000)+fn;
    }
}
5.Dao层
public interface AliossDao extends BaseMapper<Alioss> {

}

这里继承了mybatis-plus。

6.service层
接口
public interface AliossService {
    /**
     * 上传图片*/
    R uploadImg(MultipartFile file);
    /**
     * 查询全部*/
    R all();

}
实现类
public class AliossServiceImpl implements AliossService {
    @Resource
    private AliossDao dao;

    @Override
    public R uploadImg(MultipartFile file) {
        //1.验证
        if(!file.isEmpty()){
            //2.获取文件名
            String fn= FileUtil.rename(file.getOriginalFilename());
            try {
                if(AliOssUtil.upload(AliOssUtil.BUCKET,fn,file.getBytes())){
                    Calendar calendar=Calendar.getInstance();
                    calendar.add(Calendar.YEAR,3);
                    Date date=calendar.getTime();
                    String url=AliOssUtil.createUrl(AliOssUtil.BUCKET,fn,date);
                    dao.insert(new Alioss(AliOssUtil.BUCKET,fn,1,url,date));
                    return R.ok(url);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return R.fail();
    }

    @Override
    public R all() {
        return R.ok(dao.selectList(null));
    }
}
7.controller层
@RestController
public class AliOssController {
    @Resource
    private AliossService service;

    @PostMapping("/server/oss/uploadimg")
    public R uploadImg(MultipartFile file){
        return service.uploadImg(file);
    }
    @GetMapping("/server/oss/all")
    public R all(){
        return service.all();
    }
}
8.swagger接口文档测试

文件配置文成后,可以经行swagger接口测试

请添加图片描述

如图就是我们上传文件成功后生成的链接。注意:接口请求我使用了nacos,接口请求会有所不同。

9.碰到的问题以及解决
1.我碰到报错有,文件上传大小超出1MB,报错信息有byte10245什么的就是这个问题

解决:只需在yml文件中配置文件大小即可

spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
2.错误信息:
ERROR 16388 --- [nio-8081-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.aliyun.oss.OSSException: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.

解决:通过GPT得到答案

这是一个OSS(Object Storage Service,对象存储服务)的错误信息,提示你访问的存储桶(bucket)需要使用指定的端点(endpoint)进行访问。你需要将所有未来的请求发送到指定的端点,而不是当前的端点。

具体来说,你需要将请求的终端(endpoint)更改为“oss-cn-beijing.aliyuncs.com”,而不是当前的“keyword-hero.oss-cn-hangzhou.aliyuncs.com”。这可以通过更改请求的URL或配置文件中的配置来完成。

10.总结

t.


解决:通过GPT得到答案

这是一个OSS(Object Storage Service,对象存储服务)的错误信息,提示你访问的存储桶(bucket)需要使用指定的端点(endpoint)进行访问。你需要将所有未来的请求发送到指定的端点,而不是当前的端点。

具体来说,你需要将请求的终端(endpoint)更改为“oss-cn-beijing.aliyuncs.com”,而不是当前的“keyword-hero.oss-cn-hangzhou.aliyuncs.com”。这可以通过更改请求的URL或配置文件中的配置来完成。

##### 10.总结

这是java种使用第三方工具,类似的第三方还有短信服务,第三方支付等,大致思路都是导入依赖,配置yml,配置工具包,按照业务需求进行调用。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot可以通过整合阿里云OSS对象存储服务来实现文件上传和管理功能。具体实现可以参考以下步骤: 1. 在service层定义FileService接口,该接口包含上传文件到阿里云OSS的方法。例如,可以使用MultipartFile作为参数,返回上传成功后的文件URL。 2. 在controller层编写FileApiController类,该类使用@RestController注解标识为控制器,并使用@RequestMapping注解指定请求路径。在该类,通过@Autowired注入FileService,并在文件上传的接口方法调用FileService的上传文件方法并返回上传成功后的文件URL。 3. 在配置文件配置阿里云OSS的相关信息,包括accessKey、secretKey、bucketName等。可以使用SpringBoot提供的@ConfigurationProperties注解来读取配置文件的信息。 4. 在pom.xml文件添加阿里云OSS SDK的依赖。 5. 编写上传文件的前端界面,可以使用HTML或者前端框架如Vue.js、React等。 通过以上步骤的实现,SpringBoot就可以整合阿里云OSS对象存储服务,实现文件上传和管理功能。这样可以将文件存储在阿里云OSS,提高文件的安全性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合阿里云OSS对象存储服务的实现](https://download.csdn.net/download/weixin_38649091/12721580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [全网最详细SpringBoot、SpringCloud整合阿里云OSS对象存储服务](https://blog.csdn.net/weixin_55076626/article/details/127924003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值