快速上手OSS图片视频上传
一篇看懂OSS图片视频上传
简介
图片视频上传存储的方式有很多种,比如存在项目中、存在本地、存在服务器、放入第三方例如gitee、oss等,但在公司一般的业务中不会已前三者的方式存储。
问题:
- 存在项目中会很臃肿(文件大小不用说,上传服务器都懂);
- 存在本地,如果上传到服务器上也就获取不到视频图片了;
- 直接存在服务器中也是可以的,但是没试过
因为自己需求做朋友圈的动态发布,所以用整合OSS存储图片和视频充当笔记(OSS是收费的,有兴趣老表可以把图片存到gitee也可以,因为gitee是免费,可以用HttpClient读写)
gitee API : https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoStargazers?ex=no
SpringBoot整合OSS
pom.xml
<!-- oss --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version></dependency>
application.yml
#swagger
lanys:swagger:title: 牟某公司description: 牟某公司termsOfServiceUrl: https://eurasia.plus/swagger-ui.htmlContactName: xxxContactUrl: https://eurasia.plus/swagger-ui.htmlContactEmail: 1090613735@qq.comversion: 1.0aliyun:access_key_id: 拿自己OSS对应的数据access_key_secret: 拿自己OSS对应的数据bucket: 拿自己OSS对应的数据endpoint: 拿自己OSS对应的数据
AliyunConfig
/*** @author lanys* @Description:* @date 2/7/2021 下午3:12*/@Configuration
@ConfigurationProperties(prefix = "lanys.aliyun")
@Data
public class AliyunConfig {private String access_key_id;private String access_key_secret;private String endpoint;private String bucket;@Beanpublic OSS oSSClient() {return new OSSClient(endpoint, access_key_id, access_key_secret);}
}
Controller
@Autowiredprivate UpLoadFileUtil upLoadFileUtil;@ApiOperation(value = "上传图片视频")@PostMapping("/upload")@ResponseBodypublic List<OSSObjectSummary> create(MultipartFile[] upload) throws Exception {upLoadFileUtil.upLoadVideos(upload);return Result.success();}
UpLoadFileUtil(工具)
/*** @author lanys* @Description:* @date 2/7/2021 上午10:36*/
@Component
@Slf4j
public class UpLoadFileUtil {/*** 图片格式*/private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg",".jpeg", ".gif", ".png"};private static final String[] VIDEOS = new String[]{".mp4"};@Autowiredprivate OSS ossClient;@Autowiredprivate AliyunConfig aliyunConfig;/*** 图像上传* @param uploadFile 图像流处理* @return* @throws IOException*/public Boolean UpLoadImage(MultipartFile[] uploadFile) throws IOException {// 校验图片格式boolean isLegal = false;log.info("----校验图片格式---");for (MultipartFile multipartFile : uploadFile) {// 校验图片格式for (String type : IMAGE_TYPE) {if (StringUtils.endsWithIgnoreCase(multipartFile.getOriginalFilename(), type)) {isLegal = true;break;}}}if (!isLegal){log.info("----图片格式有误---");return false;}for (MultipartFile multipartFile: uploadFile) {//获取图片名称String originalFilename = multipartFile.getOriginalFilename();String filePath = getFilePath(originalFilename);System.out.println(filePath);try {ossClient.putObject(aliyunConfig.getBucket(), filePath, newByteArrayInputStream(multipartFile.getBytes()));log.info("--------图片上传成功--------");} catch (Exception e) {e.printStackTrace();log.info("上传失败");return false;}}return true;}/*** 视频上传* @param uploadFile 视频流处理* @return* @throws IOException*/public Boolean upLoadVideos(MultipartFile[] uploadFile) throws IOException {// 校验图片格式boolean isLegal = false;log.info("----校验图片格式---");for (MultipartFile multipartFile : uploadFile) {// 校验图片格式for (String type : VIDEOS) {if (StringUtils.endsWithIgnoreCase(multipartFile.getOriginalFilename(), type)) {isLegal = true;break;}}}if (!isLegal){log.info("----视频格式有误---");return false;}for (MultipartFile multipartFile: uploadFile) {//获取图片名称String originalFilename = multipartFile.getOriginalFilename();String filePath = getFilePath(originalFilename);System.out.println(filePath);try {ossClient.putObject(aliyunConfig.getBucket(), filePath, newByteArrayInputStream(multipartFile.getBytes()));log.info("--------视频上传成功--------");} catch (Exception e) {e.printStackTrace();log.info("上传失败");return false;}}return true;}/*** 生成路径以及文件名* @param sourceFileName* @return*/private String getFilePath(String sourceFileName) {DateTime dateTime = new DateTime();return "uploads/dynamic/pictures/" + dateTime.toString("yyyy") + dateTime.toString("MM") + dateTime.toString("dd") + "/" + System.currentTimeMillis() +RandomUtils.nextInt(100, 9999) + "." +StringUtils.substringAfterLast(sourceFileName, ".");}
}
留了个坑,虽然图片和视频已经上传OSS中,但是做视频截取图片javacv及没有拼接路径,然后存储到数据库中,有兴趣可以自己动手。
OSS拼接的格式:
aliyun:access_key_id: LTAI5tR3MemYvQMWpyy2spT2access_key_secret: W0WfKE8WD3LZ8mQ2x5PMTZp820AFZ1##桶bucket: id2endpoint: id3
/*** 生成路径以及文件名* @param sourceFileName* @return*/private String getFilePath(String sourceFileName) {DateTime dateTime = new DateTime();return "uploads/dynamic/pictures/" + dateTime.toString("yyyy") + dateTime.toString("MM") + dateTime.toString("dd") + "/" + System.currentTimeMillis() +RandomUtils.nextInt(100, 9999) + "." +StringUtils.substringAfterLast(sourceFileName, ".");}
对照配置文件,格式就是:
https://id2.id3/生成路径以及文件名
例子:
http://resource.develop.hulimedib.com/uploads/dynamic/pictures/20200922/c5cfe146b656a9aa242993ea335de60d.PNG
总结:
整合的整个过程很简单,依赖+配置文件id,key等,配置bean带入id+key等就可以操作OSS中的文件读取。
快速上手OSS图片视频上传相关推荐
- wangeditor自定义图片视频上传
wangeditor自定义图片视频上传 完整代码 <template><div style="border: 1px solid #ccc;height: 100%;&qu ...
- **关于阿里云oss图片批量上传问题解析**
关于阿里云oss图片批量上传问题解析 背景 最近在项目开发过程中遇到的问题,消耗了比较久的时间,过程曲折,虽然最终达到目的,但是鉴于各种常用的云数据在对象存储方面大同小异,所以记录一下. 理一下思路: ...
- uniapp做小程序的图片(视频)上传的组件封装
最近在做小程序,最后想试试新不同的技术,所以选择了用uniapp做小程序. 要求实现多张图片的上传 ,可以限制图片上传的数量,图片预览,多次使用对图片的上传顺序排序 <template>& ...
- summernote禁止图片视频上传
默认的summernote是允许图片上传和视频上传的,有一些业务上,并不需要图片上传和视频上传,只是文字相关的处理. 给summernote设置toolbar即可. $('.summernote'). ...
- 阿里云OSS图片的上传与展示:案例
前提: 开通对象存储OSS 创建存储空间 思路: 后端上传图片到OSS两种方式: 通过图片的绝对路径上传,但是浏览器为了安全考虑,无法获得本地图片的绝对路径[也可以,但没必要] 通过图片的Base64 ...
- Java基于阿里云OSS实现视频上传
file类型的input输入框获得value时可使用: <input type="file" name="videoPath" id="vv&q ...
- wangeditor图片视频上传配置
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- html七牛云图片文件上传,使用Js将文件图片视频上传到七牛云详细教程-Fun言
前言 因为项目需要,需要将一些较大文件上传到七牛云,以前都是通过数据流上传到服务端,然后在服务端进行上传操作,因为以前文件都很小所以无所谓,但是要是几百M的文件就不行了,所以就采用前端js直接上传到七 ...
- 【腾讯云的1001种玩法】 Laravel 整合微视频上传管理能力,轻松打造视频App后台...
版权声明:本文由白宦成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108597001488193402 来源:腾云阁 ...
- 阿里云视频点播(VOD)服务的视频上传JAVA代码开发(上传)
一. 设计需求 使用阿里云视频点播服务对客户端上传的视频进行转码处理, 并存储到本地. 支持海外用户的大视频文件上传. 解决海外上传的有无问题. 二. 实现思路 客户端向服务端请求凭证, 获取上传地址 ...
最新文章
- Scala 中的函数式编程基础(一)
- 同域名下不同端口cookie问题
- VTK:Medical之GenerateCubesFromLabels
- org.hibernate.InvalidMappingException: Could not parse mapping document from resource
- 数据类型的转换小结 c# 1614092651
- CV卷得厉害,研究机器学习还能做什么?
- matlab mex 矩阵,如何从mex函数访问matlab结构字段中的矩阵?
- QQ群排名霸屏:快速上排名方法
- 计算机局域网访问密码设置,win10系统设置局域网访问需要密码的详细办法
- 8188gu驱动和su realtek_RTL8188CU 和RTL8188SU有什么区别,哪个好,谢谢
- 科技SCI论文正体斜体规定
- 小程序商城后台技术选型
- Linux ffs()函数
- Ghost for Linux 出色的硬盘对拷工具(转)
- Jieba库基本用法
- matlab教师考试安排,2018教师资格证考试科目及日程安排
- 算法细节系列(20):Word Ladder系列
- 苹果又被荷兰监管机构罚款500万欧元 累计已达4500万
- qq号的正则表达式html,JavaScript中的正则表达式使用及验证qq号码的正则
- i219v微星 驱动_Intel英特尔I217/I218/I219系列网卡驱动下载