使用Java SDK上传图片到阿里云对象存储OSS

编程入门 行业动态 更新时间:2024-10-12 10:22:38

使用Java SDK上传图片到<a href=https://www.elefans.com/category/jswz/34/1770131.html style=阿里云对象存储OSS"/>

使用Java SDK上传图片到阿里云对象存储OSS

文章目录

    • 该文章已同步收录到我的博客网站,欢迎浏览我的博客网站,[xhang's blog](/)
  • 1.获取到Java SDK
  • 2.在配置类中填写参数
  • 3.Oss配置类
  • 4.代码具体实现
  • 5.接口测试

该文章已同步收录到我的博客网站,欢迎浏览我的博客网站,xhang’s blog

1.获取到Java SDK

  1. 到阿里云对象存储的SDK下载,选择Java SDK
  1. 查看SDK文档,选择简单上传

  1. 选择上传文件流,获取到源码

更改源码步骤详见 4.测试 单元

2.在配置类中填写参数

# 阿里云OSS对象存储
oss:#  配置地域节点Endpointendpoint: : LTAI5tMp**************accessKeySecret: TWrV2y************bucketName: ************
  1. 地域节点endpoint获取方式:

​ 点击Bucket实例概览

  1. 访问密钥ID accessKeyId和访问密钥accessKeySecret

​ 在头像的位置,点击AccessKey管理,生成对应的accessKeyId和accessKeySecret

​ 点击创建AccessKey

  1. bucketName即创建的Bucket名

3.Oss配置类

此配置类是为了读取application.yaml配置文件当中的OSS参数

采用@Value的方式读取配置文件当中的OSS参数

@Component
public class OssUtils implements InitializingBean {//读取配置文件中的内容@Value("${oss.endpoint}") //属性注解,能将括号中的值注入到属性中去private String endpoint;@Value("${oss.accessKeyId}")private String accessKeyId;@Value("${oss.accessKeySecret}")private String accessKeySecret;@Value("${oss.bucketname}")private String bucketName;public static String END_POINT;public static String ACCESS_KEY_ID;public static String ACCESS_KEY_SECRET;public static String BUCKET_NAME;public void afterPropertiesSet() throws Exception {END_POINT = endpoint;ACCESS_KEY_ID = accessKeyId;ACCESS_KEY_SECRET = accessKeySecret;BUCKET_NAME = bucketName;}
}

4.代码具体实现

  1. 加入阿里云OSS对象存储依赖
<!--阿里云OSS-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>
</dependency>
  1. Controller层
@RestController
public class UploadController {@Resourceprivate UploadService uploadService;@PostMapping("/upload")public ResponseResult uploadImg(MultipartFile img){return uploadService.uploadImg(img);}
}
  1. Service层接口
public interface UploadService {ResponseResult uploadImg(MultipartFile img);
}
  1. Service层实现类

​ 说明objectName是上传到BUCKET_NAME中(即Bucket)文件的路径和文件名

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.ObjectMetadata;
import com.xha.domain.ResponseResult;
import com.xha.service.UploadService;
import com.xha.utils.ImgUtils;
import com.xha.utils.OssUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;@Service
public class UploadServiceImpl implements UploadService {/*** 文件上传阿里云OSS** @param imgFile* @return*/@Overridepublic ResponseResult uploadImg(MultipartFile imgFile) {
//        1.获取到原始文件名String originalFilename = imgFile.getOriginalFilename();String fileName = ImgUtils.generateFilePath(originalFilename);String imgUrl = ossUpload(imgFile, fileName);return ResponseResult.okResult(imgUrl);}private String ossUpload(MultipartFile multipartFile, String fileName) {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(OssUtils.END_POINT, OssUtils.ACCESS_KEY_ID, OssUtils.ACCESS_KEY_SECRET);// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。String objectName = "文件目录/" + fileName;try {InputStream inputStream = multipartFile.getInputStream();// 创建PutObject请求。ossClient.putObject(OssUtils.BUCKET_NAME, objectName, inputStream);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} catch (IOException e) {e.printStackTrace();} finally {if (ossClient != null) {ossClient.shutdown();}}
//        返回对象存储中的图片路径        return "https://" + OssUtils.BUCKET_NAME + "." + OssUtils.END_POINT + "/" + objectName;}
}

5.接口测试

  1. 采用ApiFox发送请求

文件列表中已经存在了上传的图片

  1. 前端项目测试

    上传成功

更多推荐

使用Java SDK上传图片到阿里云对象存储OSS

本文发布于:2024-02-14 15:34:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763960.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:阿里   上传图片   对象   Java   SDK

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!