前言:

现公司采用七牛作为OSS服务器存储视频资源,七牛直播文件上传在七牛中,但是只要是文件都往里面放,在这种情况下,公司决定对七牛视频文件进行整理,节约存储空间资源

思路:

考虑到上传上七牛的视频文件都是以切片的形式上传,即m3u8+TTS格式文件组合,而数据库中只保存mu38文件的地址,

直接过滤出无用的文件的话只能过滤出m3u8文件,tts文件无法删除,故在官方文档寻找到如下工具

https://developer.qiniu.com/kodo/tools/1302/qshell

所以呢,调用外部命令行工具即可实现

需求:

删除七牛上数据库未保存的用户上传的无用视频文件(但是近十天之内的不删除)

解决方案:

步骤一、提取七牛文件列表,用于筛选无用文件

public static CopyOnWriteArrayList<QiNiuEntity> getQiNiuFiles(String bucket, String prefix ) {BucketManager bucketManager = getBucketManager();//指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串String delimiter = "";  //没有缺省值则不填,列举数据,//每次迭代的长度限制,最大1000,推荐值 1000int limit = 1000;//列举空间文件列表BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit,delimiter);CopyOnWriteArrayList<QiNiuEntity> files=new CopyOnWriteArrayList<>();while (fileListIterator.hasNext()) {//处理获取的file list结果FileInfo[] items = fileListIterator.next();for (FileInfo item : items) {QiNiuEntity qiNiuEntity =new QiNiuEntity();qiNiuEntity.setKey(item.key);String time=   DateUtils.getStringTime(item.putTime);qiNiuEntity.setPutTime(time);// System.out.println(item.key);qiNiuEntity.setMimeType(item.mimeType);files.add(qiNiuEntity);if(files.size()>998){  //七牛最大1000值失效,只能手动控制下了return files;}}}return  files;
}

步骤二、提取数据库中的m3u8路径,由于是JSON格式保存在数据库中,所以需要提取

步骤三、比较并过滤出无用的文件

步骤四、调用qshell删除无用文件

public R deleteFiles() {//recordings   //kaojiCopyOnWriteArrayList<QiNiuEntity> qiNiuFiles = qiNiuFileService.getFile(bucketFile, "recordings");//十天之内的文件过滤掉不删除String nowTime = DateUtils.formatTime("yyyy-MM-dd HH:mm:ss", System.currentTimeMillis());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date dateTime1 = null;try {dateTime1 = sdf.parse(nowTime);} catch (ParseException e) {e.printStackTrace();}String[] fileNames = new String[1000]; //最大只能为一千for (int i = 0; i < qiNiuFiles.size(); i++) {Date dateTime2 = null;try {dateTime2 = sdf.parse(qiNiuFiles.get(i).getPutTime());long difference = dateTime1.getTime() - dateTime2.getTime();long days = difference / (1000 * 60 * 60 * 24);/*    String fileTime=qiNiuFiles.get(i).getPutTime();if(days<10){   //相距十天之内的文件过滤不删除System.out.println(qiNiuFiles.get(i).getPutTime());System.out.println(qiNiuFiles.get(i).getKey());}*/if (qiNiuFiles.get(i).getIsOld() == 0 && days > 10) {  //未放入数据库中的文件中中10天之内上传的文件不删除fileNames[i] = qiNiuFiles.get(i).getKey();}} catch (ParseException e) {e.printStackTrace();}if (i > 998) {break;}}List<String> tmp = new ArrayList<String>();for (String str : fileNames) {if (str != null && str.length() != 0) {tmp.add(str);}}fileNames = tmp.toArray(new String[0]);Arrays.sort(fileNames);//批量删除数据,该方法暂时不用,用来批量删除数据用的// qiNiuFileService.deleteFiles(fileNames, bucketFile);for (int i = 0; i < fileNames.length; i++) {StringBuilder deleteFile =new StringBuilder("qshell m3u8delete ").append(bucketFile).append("  ").append(fileNames[i]);String deleteFiles = deleteFile.toString();String netsString = exec(deleteFiles).toString();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("==========获得值=============");logger.info("CMDEXCQINIU..." + netsString + "isGoodInfo");}return R.ok();
}

//步骤五、在docker中安装qshell,没有使用docker的同学可以直接在服务器上装一个qshell

转载请注明出处,掌声送给社会人

七牛删除视频文件操作相关推荐

  1. golang常用库之-mgo.v2包、MongoDB官方go-mongo-driver包、七牛Qmgo包 | go操作mongodb、mongodb bson

    文章目录 golang常用库之-mgo.v2包.MongoDB官方go-mongo-driver包.七牛Qmgo包 | go操作mongodb.mongodb bson 一.[不推荐]mgo.v2包 ...

  2. 七牛云音视频文件并转码、添加水印官方示例

    七牛云音视频文件并转码.添加水印官方示例 java-sdk:https://github.com/qiniu/java-sdk/blob/master/examples/upload_pfops.ja ...

  3. php使用七牛直播,七牛上传文件,PHP版本

    自从知道七牛以来,就一直在用七牛做图片外链,但是每次需要到七牛官网登录,然后再上传图片.感觉很麻烦,最近想做一个自己的上传到七牛的平台,开始的想法是用C#写一个windows客户端,在用swift写一 ...

  4. 七牛切片视频php,音视频切片(HLS)

    音视频切片接口用于支持HTTP Live Streaming播放.HTTP Live Streaming 是由 Apple 提出的基于 HTTP 的流媒体传输协议.它将一整个音频.视频流切割成可由 H ...

  5. 七牛切片视频php,七牛云6:付费视频防盗链-视频切片并通过AES128加密视频

    上一篇我们讲了通过七牛云的私有资源防止付费视频被盗链,今天我们学习一下七牛云的视频切片,并通过AES128进行加密. 视频切片 七牛云提供音视频切片接口以支持HLS(HTTP Live Streami ...

  6. cropperjs图片裁剪器及七牛上传文件

    安装: cropperjs : https://github.com/fengyuanchen/cropperjs npm install cropperjs --save --save-exact ...

  7. 七牛上传文件小工具v0.1

    为什么80%的码农都做不了架构师?>>>    非常喜欢 七牛的存储,但是七牛也没有论坛,想找个小工具都很难.而官方的windows下的上传工具 qrsync虽然很强大,但是对于经常 ...

  8. Linux七牛云批量上传api,使用七牛qshell 本地文件 批量上传到七牛云 已解决

    在之前项目中有使用郭这个命令, 因此找问题 直接定位在 qshell 这个方法, 这次项目中要的需要把对应的本地图片和七牛云同步,其实为了解决微信小程序访问图片的快的原因,七牛的图片是走的CDN节点. ...

  9. laravel 七牛 上传文件配置

    安装七牛sdk 七牛官方sdk安装传送门 http://developer.qiniu.com/code/v7/sdk/php.html config目录下 创建qiniu.php return [' ...

  10. 七牛切片视频php,音视频切片

    音视频切片 描述 音视频切片是七牛云存储提供的云处理功能,用于支持HTTP Live Streaming播放. HTTP Live Streaming是由Apple提出的基于HTTP的流媒体传输协议. ...

最新文章

  1. 4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例
  2. 我的Linux随笔目录
  3. wifi 7都来了?
  4. Python实现switch效果
  5. 【数据结构与算法】之深入解析“压缩字符串”的求解思路与算法示例
  6. WebCast学习链接
  7. java程序拦截dde漏洞问题_Office DDE漏洞学习笔记
  8. javascript 中==和===的区别
  9. 能上QQ不能上浏览器处理方法(win11版)
  10. 论文|Jointly Pre-Training Transformers on Unpaired Images and Text
  11. Kafka:High level consumer vs. Low level consumer
  12. 鼠标悬停 -css如何实现鼠标移至图片上显示遮罩层及文字
  13. BigBrother的大数据之旅Day 14 某项目流程
  14. 英语不好可以学python_想学Python这个,英语基础不好,可以学会吗?
  15. windows系统文件名不能包含哪些字符
  16. 点亮LED灯驱动编写过程
  17. 区块链 — 默克尔树
  18. 广播、组播 socket编程
  19. 如何在论文中添加参考文献引用(以Word2016为例)
  20. engineecms——工程师知识管理系统,带文档协作和状态和流程

热门文章

  1. html 页面文字不能复制粘贴,网页文字无法复制粘贴 复制粘贴不能用
  2. 湖南大学计算机考研复习资料
  3. win10怎么快速锁定计算机,win10怎么快捷键锁定电脑_win10一键锁屏快捷键是什么-win7之家...
  4. 学习笔记-测试利器Mocha
  5. html内嵌式选择器,CSS样式 CSS选择器(Cascading Style Sheet)
  6. 2020牛客暑期多校训练营(第九场) Groundhog and Gaming Time
  7. 20165219王彦博第一周学习总结
  8. 是时候让《武林外传》教你反内卷了
  9. 游戏实时语音SDK是怎么炼成的
  10. cocos2dx腾讯实时语音sdk接入