Java上传图片到阿里云OSS并回显URL

Java上传图片到阿里云OSS并回显URL

关键代码

OSSClientHandler.java

import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;@Component
public class OSSClientHandler {@Value("${aliyun.endpoint}")private String endpoint;@Value("${aliyun.accessKeyId}")private String accessKeyId;@Value("${aliyun.accessKeySecret}")private String accessKeySecret;@Value("${aliyun.bucket}")private String bucket;private OSS ossClient;private static final SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd");private static final Long expirationTime = 3600 * 1000 * 24 * 7L;// 图片过期时长(7天)public static void main(String[] args) throws Exception {OSSClientHandler aa = new OSSClientHandler();System.out.println("hao");}// 上传图片+获取URLpublic ImageInfo uploadImgAndGetUrl(MultipartFile file) throws Exception {getOSS();String orgFileName = file.getOriginalFilename();// 获取原始文件名String suffix = orgFileName.substring(orgFileName.lastIndexOf("."));String newName = UUID.randomUUID().toString().replace("-","") + suffix;String filePath = DF.format(new Date()) + "/" + newName;ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentType(getcontentType(suffix));ossClient.putObject(bucket, filePath, file.getInputStream(), objectMetadata);ImageInfo imageInfo = new ImageInfo(filePath, System.currentTimeMillis(),System.currentTimeMillis() + expirationTime);Date expiration = new Date(imageInfo.getExpireTime());URL url = ossClient.generatePresignedUrl(bucket, filePath, expiration);imageInfo.setUrl(url.toString());return imageInfo;}// 获取URLpublic String getUrl(String filePath) {getOSS();Date expiration = new Date(new Date().getTime() + expirationTime);URL url = ossClient.generatePresignedUrl(bucket, filePath, expiration);return url.toString();}private static String getcontentType(String FilenameExtension) {if (FilenameExtension.equalsIgnoreCase(".bmp")) {return "image/bmp";}if (FilenameExtension.equalsIgnoreCase(".gif")) {return "image/gif";}if (FilenameExtension.equalsIgnoreCase(".jpeg") || FilenameExtension.equalsIgnoreCase(".jpg")|| FilenameExtension.equalsIgnoreCase(".png")) {return "image/jpg";}return "image/jpg";}private OSS getOSS() {if (null == ossClient) {ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);}return ossClient;}public void upload(String fileUrl, InputStream inputStream) {try {getOSS();ossClient.putObject(bucket, fileUrl, inputStream);} catch (Exception e) {e.printStackTrace();}}public InputStream download(String fileUrl) {try {getOSS();OSSObject ossObject = ossClient.getObject(bucket, fileUrl);return ossObject.getObjectContent();} catch (Exception e) {e.printStackTrace();}return null;}
}

ImageInfo.java

import java.io.Serializable;import lombok.Data;@Data
public class ImageInfo implements Serializable {private static final long serialVersionUID = 6448908249255948262L;String filePath;Long createTime;Long expireTime;String url;public ImageInfo() {}public ImageInfo(String filePath, Long createTime, Long expireTime) {this.filePath = filePath;this.createTime = createTime;this.expireTime = expireTime;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDBC基本概念

什么是JDBC JDBC概念 JDBC(Java DataBase Connectivity)是一套统一的基于Java语言的关系数据库编程接口规范。 该规范允许将SQL语句作为参数通过JDBC接口发送给远端数据库, …

Java 为01序列实现快速 HashSet

01 数组 import java.util.BitSet; import java.util.HashMap; import java.util.Arrays;public class FastHashSet {private HashMap<Integer, BitSet> map new HashMap<>();public void add(int[] array) {BitSet bitSet new BitSet(array.length);for (int i…

4G模块驱动移植

一、4G模块概述 1、调试的模块型号是广和通的 NL668-EAU-00-M.2。 2、使用的接口是 M.2 Key-B。实际只用到了M2里的USB接口。 调试过程 以QMI_WWAN号方式进行说明&#xff0c;其他拨号方式也试过。最后以QMI_WWAN方式调通了&#xff0c;拨号成功了。 其他拨号方式因为现有文档…

练习敲代码速度

2023年9月18日&#xff0c;周一晚上 今晚不想学习&#xff0c;但又不想玩游戏&#xff0c;于是找了一些练习敲代码的网站来玩玩&#xff0c;顺便练习一下敲代码的速度 目录 参考资料个人推荐第一个 第二个第三个 参考资料 电脑打字慢&#xff0c;有哪些比较好的练打字软件&a…

界面控件DevExpress的VS报表设计器 v23.1——启动速度全面提升

本文主要介绍在DevExpress v23.1这个版本发布周期中对Visual Studio报表设计器所做的改进&#xff0c;包括优化的启动时间、新的全局选项对话框等。 屡获大奖的界面控件套包DevExpress 今年第一个重要版本v23.1正式发布&#xff0c;该版本拥有众多新产品和数十个具有高影响力的…

用无代码搭建数据中台,竟做到如此丝滑

文章目录 需求背景系统介绍配置说明1 菜单导航2 系统自带组件导入页面&#xff08;1&#xff09;数据集成相关组件&#xff08;2&#xff09;数据服务相关组件 3 由系统组件路径添加页面&#xff08;1&#xff09;数据资产管理&#xff08;2&#xff09;数据标准管理&#xff0…

vben-admin中渲染table表格时怎么处理不同的数据结构

最近在用vben admin开发后台管理系统&#xff0c;vben admin这个后管端框架封装的非常细&#xff0c;颗粒度非常细&#xff0c;如果了解里面的组件或者api用法&#xff0c;那开发起来非常快。如果不了解&#xff0c;那就非常痛苦了&#xff0c;目前关于vben admin这块的开发问题…

linux-awk命令

目录 1.linux awk 模糊查询 2.linux awk 取列 2 3.linux awk 多个条件and查询 4.linux awk取列 1 5.linux awk取行 6.linux awk 所有pod日志查询 7.linux awk 批量删除pod 1.linux awk 模糊查询 释&#xff1a;~ 为包含&#xff0c;!~ 为不包含 【1】查询test.log文件…

Linux工具(一)

前言&#xff1a;Linux是一个开源的操作系统&#xff0c;它拥有庞大而活跃的开发社区&#xff0c;为用户提供了丰富多样的工具和应用程序。这些工具不仅适用于系统管理员和开发人员&#xff0c;也适用于普通用户&#xff0c;可以帮助他们完成各种任务&#xff0c;从简单的文件管…

题目 1057: 二级C语言-分段函数

有一个函数如下&#xff0c;写一程序&#xff0c;输入x&#xff0c;输出y值。 保留两位小数 样例输入 1 样例输出 1.00 这道题的思路很简单&#xff0c;我直接用if判断输入的X对应的函数Y的区间&#xff0c;代入对应的函数&#xff0c;求出结果。记得变量用浮点型&#xff…

JS操作字符串方法学习系列(3)-每天学习10个方法

目录 字符串包含 (Includes)**:**字符串字符替换 (CharAt 和 CharCodeAt)**:**字符串逆序 (Reverse)**:**字符串拼接 (Join)**:**字符串查找最大/最小字符 (Max/Min)**:**字符串重复填充 (PadStart 和 PadEnd)**:**字符串按字母排序 (Sort)**:**字符串分组 (Chunking)**:**字符…

手游(偏二次元)简记

游戏上市时间开发商、代理/发行公司类型、品质、乐趣日常肝度周本、活动肝度和氪度等崩坏&#xff1a;星穹铁道2023年4月26日米哈游回合制二次元手游&#xff0c;有场景地图可自由活动。Top3水平。建模精美&#xff0c;动画级演出&#xff0c;无PVP。乐趣&#xff1a;剧情、集卡…

亚马逊云科技面向游戏运营活动的AI生图解决方案

随着Stable Diffusion等AI生图方案逐步普及&#xff0c;越来越多的场景被开发和落地。其中面向游戏C端玩家的AI生图营销活动场景正在被逐步验证&#xff1a;在某个游戏社区中&#xff0c;玩家一键从手机上传一张照片&#xff0c;AI会将自动识别该照片中的元素并替换成游戏中相应…

今年嵌入式行情怎么样?

今年嵌入式行情怎么样&#xff1f; 嵌入式技术今年可以说是IT领域中最炙手可热的之一。随着中年危机和内卷问题的出现&#xff0c;越来越多的互联网从业者将目光投向了嵌入式领域。国内的嵌入式市场一直受终端需求变化的影响而波动&#xff0c;但随着国内产业自主化的发展趋势…

Python匿名函数

简单来说&#xff0c;匿名函数就是懒。 结构 函数名 lambda 参数 : 函数体 fun lambda x,y : x*y*y fun(3,5)优点 可以让写代码更“懒”一点

[S2] Challenge 25 心脏病预测

问题 您是一家医疗保健公司的数据科学家&#xff0c;试图创建患者是否患有心脏病的预测因子。目前&#xff0c;您正在试验 11 种不同的特征&#xff08;潜在心脏病指标&#xff09;和 XGBoost 分类模型&#xff0c;您注意到它的性能可能会根据其调整方式而发生很大变化。在此挑…

Docker的基本操作

Docker的基本操作 操作常见指令 # 推送镜像到服务 docker push # 从服务拉去镜像 docker pull # 构建镜像 docker build # 保存镜像为一个压缩包 docker save # 加载镜像 docker load镜像加载、删除等 拉取nginx docker pull nginx查看镜像 docker images # 只查看id doc…

C++ 霍夫变换圆形检测

霍夫变换圆形检测 一、检测原理二、实现步骤三、算法实现一、检测原理 HoughCircles 参数说明: HoughCircles(   InputArray image,  // 输入图像 ,必须是 8 位的单通道灰度图像   OutputArray circles,  // 输出结果,发现的圆信息   Int method,  // 方法 - HOUGH…

thinkphp:查询本周中每天中日期的数据,查询今年中每个月的数据,查询近五年每年的总数据

一、查询本周中每天中日期的数据 结果&#xff1a; 以今天2023-09-14为例&#xff0c;这一周为2023-09-11~2023-09-07 代码 后端thinkphp: //查询本周每天的的总金额数 //获取本周的起始日期和结束日期 $weekStart date(Y-m-d, strtotime(this week Monday)); $weekEnd …

【QT--使用百度地图API显示地图并绘制路线】

QT--使用百度地图API显示地图并绘制路线 前言准备工作申请百度地图密钥(AK)安装开发环境 开发过程新建项目ui界面GPSManager类主窗口Map 效果展示 前言 先吐槽一下下&#xff0c;本身qt学的就不咋滴&#xff0c;谁想到第一件事就是让写一个上位机工具&#xff0c;根据CAN总线传…