aliyun图片存储OSS工具类

2024-09-07 23:44
文章标签 工具 图片 存储 oss aliyun

本文主要是介绍aliyun图片存储OSS工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pom.xml配置jar包

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

yml配置相关key

#oss 配置
oss:#AKaccessKey: accessKey#SKsecretKey: secretKey# 访问域名:以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.comendpoint: https://oss-cn-hangzhou.aliyuncs.com# 存储空间:Bucket名称必须全局唯一bucketName: hsope-test#对象objectName: rental/

封装的OSSUtils

package com.db.common.utils.oss;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.OSSObject;
import com.db.common.utils.DateUtils;
import com.db.common.utils.uuid.UUID;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;@Component
public class OSSUtils {private static final Logger log = LoggerFactory.getLogger(OSSUtils.class);private static String accessKey;private static String secretKey;private static String endpoint;private static String bucketName;private static String objectName;@Value("${oss.accessKey}")public void setAccessKey(String accessKey) {OSSUtils.accessKey = accessKey;}@Value("${oss.secretKey}")public void setSecretKey(String secretKey) {OSSUtils.secretKey = secretKey;}@Value("${oss.endpoint}")public void setEndpoint(String endpoint) {OSSUtils.endpoint = endpoint;}@Value("${oss.bucketName}")public void setBucketName(String bucketName) {OSSUtils.bucketName = bucketName;}@Value("${oss.objectName}")public void setObjectNamee(String objectName) {OSSUtils.objectName = objectName;}//默认有效期10年private static final Long DEFAULT_EXPIRATION_TIME = 3600 * 1000 * 24 * 365 * 10L;private static OSS ossClient = null;public static void createClient() {ossClient = new OSSClientBuilder().build(endpoint, accessKey, secretKey);}/*** 上传* @param inputStream 文件流* @param fileName 文件名*/public static String upload(InputStream inputStream, String fileName) {if (ossClient == null) {createClient();}if (!ossClient.doesBucketExist(bucketName)) {ossClient.createBucket(bucketName);}ossClient.putObject(bucketName,  fileName, inputStream);log.info("文件上传成功:{}", fileName);
//        ossClient.shutdown();//获取urlreturn getUrl(fileName);}/*** 下载* @param key key*/public InputStream dowload(String key){if (ossClient == null) {createClient();}OSSObject object = ossClient.getObject(bucketName, key);return object.getObjectContent();}/*** 删除* @param key key*/public void delete(String key){if (ossClient == null) {createClient();}ossClient.deleteObject(bucketName, key);log.info("文件删除成功:{}", key);}/*** 上传base64图片* @param base64 base64图片* @return url*/public static String uploadBase64(String base64){//文件扩展名String fileExt = "jpeg";//base64照片,头部信息处理if (base64.contains(";base64,")) {base64 = base64.split(",")[1];}//获取日期String date = DateUtils.getNowShDate()+"/";String fileName = objectName + date + UUID.randomUUID().toString().replace("-","") + "." + fileExt;return upload(new ByteArrayInputStream(Base64.decodeBase64(base64)),fileName);}/*** 获取url*/public static String getUrl(String fileName){if (ossClient == null) {createClient();}// 指定签名URL过期时间为10分钟。Date expiration = new Date(DateUtils.parseDate(DateUtils.getNowTime()).getTime() + DEFAULT_EXPIRATION_TIME );URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);if(url == null){log.info("文件上传失败:{}", fileName);}return "https://" + url.getHost() + url.getPath();}/*** 获取有时效的图片地址* @param imageUrl 例子* @return 图片地址*/public static String getUrlByExpiration(String imageUrl) {if (ossClient == null) {createClient();}String fileName = objectName + imageUrl.split(objectName)[1];// 指定签名URL过期时间为10分钟。Date expiration = new Date(DateUtils.parseDate(DateUtils.getNowTime()).getTime() + 1000 * 60 * 10 );URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);return url == null ? null : url.toString();}/*** 根据有图片地址获取图片base64* @param filePath 图片地址* @return base64图片*/public static String fileToBase64(String filePath) throws IOException {byte[] fileContent = Files.readAllBytes(Paths.get(filePath));return java.util.Base64.getEncoder().encodeToString(fileContent);}/*** 根据有时效的图片地址获取图片base64* @param imgFile 有时效的图片地址* @return base64图片*/public static String getImgStr(String imgFile) {try {File tempFile = File.createTempFile("temp-", ".jpg");cn.hutool.http.HttpUtil.downloadFileFromUrl(imgFile,tempFile,3000);String base64str = fileToBase64(tempFile.getAbsolutePath());tempFile.delete();return base64str;} catch (Exception e) {e.printStackTrace();return "1";}}public static void main(String[] args) {OSSUtils ossUtils = new OSSUtils();String s = ossUtils.uploadBase64("");System.out.println("---------"+s);}
}

业务使用

存储

上传base64图片,获取到图片地址

OSSUtils.uploadBase64(f.getImage())

显示

根据存储的图片地址,获取到有时效的图片地址,给前端展示

OSSUtils.getUrlByExpiration(f.getImage()))

获取

根据存储的图片地址,获取base64图片

OSSUtils.getImgStr(OSSUtils.getUrlByExpiration(f.getImage()))

完结!

这篇关于aliyun图片存储OSS工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146507

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD