阿里云OSS工具类 springboot
阿里云oss maven依赖
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
阿里云oss 配置项
aliyun: appid: xxxx appscrete: xxxx oss: domain: https://oss.xxx.com/ endpoint: oss-cn-shenzhen.aliyuncs.com bucket-name: xxx-bucket
封装工具类
package com.lhn.aliyun.utils; import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSException; import com.aliyun.oss.common.auth.CredentialsProviderFactory; import com.aliyun.oss.model.ObjectMetadata; import com.lhn.spring.util.SpringContextUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.core.env.Environment; import org.springframework.util.Base64Utils; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; /** * 阿里云OSS工具类 * * @author lianhuinan * @since 2022/4/12 16:30 */ public class OssUtil {
private final static String ossAccessDomainUrl; private final static String ossBucketName; private final static OSSClient client; static { Environment environment = SpringContextUtil.getBean(Environment.class); String endpointUrl = environment.getProperty("aliyun.oss.endpoint"); ossBucketName = environment.getProperty("aliyun.oss.bucket-name"); String keyId = environment.getProperty("aliyun.appid"); String keySecret = environment.getProperty("aliyun.appsecret"); ossAccessDomainUrl = environment.getProperty("aliyun.oss.domain"); client = new OSSClient(endpointUrl, CredentialsProviderFactory.newDefaultCredentialProvider(keyId, keySecret), new ClientConfiguration()); } /** * @param fileName 用户文件名称 * @return 实际的cos上文件名称 */ private static String getRealFileName(String saveFolder, String fileName) { return StringUtils.isNotEmpty(saveFolder) ? saveFolder + "/" + fileName : fileName; } public static String upload(String saveFolder, String contentType, String fileName, InputStream input) { if (StringUtils.isEmpty(fileName) || StringUtils.isEmpty(contentType) || null == input) { return null; } ObjectMetadata objectMeta = new ObjectMetadata(); objectMeta.setContentType(contentType); String filePath = getRealFileName(saveFolder, fileName); try { client.putObject(ossBucketName, filePath, input, objectMeta); return ossAccessDomainUrl + filePath; } catch (Exception e) { e.printStackTrace(); return null; } finally { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } public static String upload(String saveFolder, String contentType, String fileName, long contentLength, InputStream input) { if (StringUtils.isEmpty(fileName) || StringUtils.isEmpty(contentType) || contentLength <= 0 || null == input) { return null; } ObjectMetadata objectMeta = new ObjectMetadata(); objectMeta.setContentLength(contentLength); objectMeta.setContentType(contentType); String filePath = getRealFileName(saveFolder, fileName); try { client.putObject(ossBucketName, filePath, input, objectMeta); return ossAccessDomainUrl + filePath; } catch (Exception e) { e.printStackTrace(); return null; } finally { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } public static String upload(String saveFolder, String fileMainName, MultipartFile multipartFile) { if (null != multipartFile && !multipartFile.isEmpty()) { try { String filename = multipartFile.getOriginalFilename(); String extFileName; if (StringUtils.isNotEmpty(filename)) { extFileName = filename.substring(filename.lastIndexOf(".")); } else { extFileName = ".jpg"; } return upload(saveFolder, multipartFile.getContentType(), fileMainName + extFileName, multipartFile.getSize(), multipartFile.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } return null; } public static String upload4SpecialName(String saveFolder, String fileName, MultipartFile multipartFile) { if (null != multipartFile && !multipartFile.isEmpty()) { try { return upload(saveFolder, multipartFile.getContentType(), fileName, multipartFile.getSize(), multipartFile.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } return null; } public static String uploadImgByBase64(String saveFolder, String fileName, String base64ImgContent) { if (StringUtils.isEmpty(fileName) || StringUtils.isEmpty(base64ImgContent)) { return null; } try { byte[] bytes = Base64Utils.decodeFromString(base64ImgContent); return upload(saveFolder, "image/jpg", fileName, bytes.length, new ByteArrayInputStream(bytes)); } catch (Exception e) { e.printStackTrace(); return null; } } public static void delete(String fileUrl) { if (StringUtils.isEmpty(fileUrl)) { return; } try { fileUrl = fileUrl.replaceFirst(ossAccessDomainUrl, ""); client.deleteObject(ossBucketName, fileUrl); } catch (OSSException | ClientException e) { e.printStackTrace(); } } public static String getByFileName(String pathFile) { return ossAccessDomainUrl + client.getObject(ossBucketName, pathFile).getKey(); } }
获取上下文工具类
package com.lhn.spring.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * Spring工具类,获取Spring上下文对象等 * @author lianhuinan * @since 2021/11/08 21:11 */ @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringContextUtil.applicationContext == null){ SpringContextUtil.applicationContext = applicationContext; } } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name){ return getApplicationContext().getBean(name); } public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); } }
分类:
使用技巧
, spring boot
标签:
spring boot
, oss
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?