华为云对象存储obs文件上传

搭建华为云obs服务

  1. 开通obs服务
  2. 创建桶对象

注意:不用特地买资源包,学习使用的话按需付费即可【记得在自己的华为云账号充一点钱方便他自己扣费】

创建成功之后:

点击进去之后,就可以知道对我们的有用参数:

  • bucketName
  • endpoint

  1. Obs的访问秘钥【ak,sk】

找到个人中心的控制台部分

点击我的凭证 -> 访问密钥 -> 添加密钥,并把获取到的密钥下载下来【是一个表格格式,打开之后就可以获取到自己的Access Key Id和Secret Access Key这两个有用参数】

java实现文件上传


前面的部分做完之后算是搭建好了华为云obs服务

更多细节参考官方文档: SDK - java部分

接下来我们要做的是在java代码中如何实现文件上传

导入依赖

<!--导入华为云obs服务依赖-->
  <dependency>
      <groupId>com.huaweicloud</groupId>
      <artifactId>esdk-obs-java-bundle</artifactId>
      <version>3.21.11</version>
  </dependency>

搭建模块

创建对象存储文件上传的专门模块:ObsController, ObsService, ObsServiceImpl

实现逻辑

Controller层:

在obsController中写一个upload方法:

需要注意的点:

  • post请求
  • 接受参数必须是MultipartFile类型,注意此时的参数名是file,所以前端部分在传输文件的时候,需要给name属性是file且type=file,不然不能正确上传
  • 返回的data属性中是一个imgUrl, 也就是我们上传到华为云返给我们的url

Serviceimpl服务实现层:

此处为了避免硬编码的风格,我使用的是:

  • 定义一个obs.properties的配置文件
  • 创建一个ObsProperties.java的配置类把obs.properties的内容批量注入到对应的属性中

服务层实现逻辑:

  • 注意:如果我们是上传图片,文件等,最好是使用的是文件流的方式,官方文档给出的方法是new File(filename),但是我们不是上传的本地文件,我们是通过前端部分传回的文件且此时是file对象接受参数,使用文件流的方式更好
  • 注意拼接url【对照之前直接使用华为云obs图形化界面上传文件时给出的url进行对应的拼接】
    • url的拼接此时就是: https:// + 自己创建的桶对象名字 + 服务节点endpoint + 文件名

代码:

@Override
public String upload(MultipartFile file) {
    // 填写一些必要的信息
    String endPoint = obsProperties.getEndpoint();
    String ak = obsProperties.getAccessKey();
    String sk = obsProperties.getSecretKey();
    // 创建ObsClient实例
    ObsClient obsClient = new ObsClient(ak, sk, endPoint);
    try {
        // 获取文件流
        InputStream inputStream = file.getInputStream();
        String originalFilename = file.getOriginalFilename();
        // 根据年月日创建一个文件夹,方便管理图片信息
        String fileName = new DateTime().toString("yyyy/MM/dd") + UUID.randomUUID().toString().replace("-", "") + originalFilename;
        // 使用文件流的方式上传 -- 创建PutObject请求
        obsClient.putObject(obsProperties.getBucketName(), fileName, inputStream);
        // 返回图片地址进行保存
        // https://xianzeng.obs.cn-north-4.myhuaweicloud.com/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220908100029.jpg
        System.out.println("https://" + obsProperties.getBucketName() + "." + obsProperties.getEndpoint() + "/" + fileName);
        return "https://" + obsProperties.getBucketName() + "." + obsProperties.getEndpoint() + "/" + fileName;
    } catch (Exception e) {
        e.printStackTrace();
        return "";
    } finally {
        if(obsClient != null) {
            try {
                obsClient.close(); // 关闭资源
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

测试

返回值是url,前端可以根据url直接渲染

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
你可以使用 Java SDK 来实现华为云对象存储OBS文件上传。以下是一个简单的示例代码: ```java import java.io.File; import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.PutObjectResult; public class ObsUploadDemo { public static void main(String[] args) throws KeyManagementException, NoSuchAlgorithmException, ObsException, IOException { // 创建ObsClient对象 ObsClient obsClient = new ObsClient("yourAccessKeyId", "yourSecretAccessKey", "yourEndpoint"); // 设置bucket名称和对象名称 String bucketName = "yourBucketName"; String objectKey = "yourObjectName"; // 设置本地文件路径 String filePath = "yourLocalFilePath"; // 上传文件 File file = new File(filePath); PutObjectResult result = obsClient.putObject(bucketName, objectKey, file); // 打印上传结果 System.out.println("请求ID:" + result.getRequestId()); System.out.println("ETag:" + result.getEtag()); // 关闭ObsClient对象 obsClient.close(); } } ``` 其中,`yourAccessKeyId` 和 `yourSecretAccessKey` 分别是你的华为云账号的Access Key ID 和 Secret Access Key;`yourEndpoint` 是你的OBS服务的访问域名;`yourBucketName` 是你要上传的存储桶名称;`yourObjectName` 是你要上传的对象名称;`yourLocalFilePath` 是你要上传的本地文件路径。 注意,以上代码仅作为示例,实际使用时需要根据你的具体情况进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MGCoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值