在上一篇博客中,笔者简单介绍了qiniu SDK的资源管理以及各种上传凭证的生成,本章笔者将介绍qiniu SDK的资源批量管理功能。
上篇文章的链接:从零开始,在java中使用七牛云实现文件云存储(二)
进入正题!
- 批量获取文件状态:
/** * 批量获取文件状态 * @param zone * @param auth * @param keyList 文件名列表, 单次批量请求的文件数量不得超过1000 * @param bucket * @return */ public static BatchStatus[] getFilesStat(Zone zone,Auth auth,String[] keyList,String bucket) { // 构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(zone); BucketManager bucketManager = new BucketManager(auth, cfg); try { BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations(); batchOperations.addStatOps(bucket, keyList); Response response = bucketManager.batch(batchOperations); BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class); for (int i = 0; i < keyList.length; i++) { BatchStatus status = batchStatusList[i]; String key = keyList[i]; System.out.print(key + "\t"); if (status.code == 200) { // 文件存在 System.out.println(status.data.hash); System.out.println(status.data.mimeType); System.out.println(status.data.fsize); System.out.println(status.data.putTime); } else { System.out.println(status.data.error); } } return batchStatusList; } catch (QiniuException ex) { System.err.println(ex.response.toString()); } return null; }
说明:参数keyList:想要获取状态的文件名数组。 - 批量修改文件类型:
/** * 批量修改文件类型,单次批量请求的文件数量不得超过1000 * @param zone * @param auth * @param keyMimeMap 文件名:目的类型 ,例keyMimeMap.put("qiniu.jpg", "image/jpg"); * @param bucket * @return */ public static BatchStatus[] editFilesType(Zone zone,Auth auth,HashMap<String, String> keyMimeMap,String bucket) { //构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(zone); BucketManager bucketManager = new BucketManager(auth, cfg); try { BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations(); //添加指令 for (Map.Entry<String, String> entry : keyMimeMap.entrySet()) { String key = entry.getKey(); String newMimeType = entry.getValue(); batchOperations.addChgmOp(bucket, key, newMimeType); } Response response = bucketManager.batch(batchOperations); BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class); int index = 0; for (Map.Entry<String, String> entry : keyMimeMap.entrySet()) { String key = entry.getKey(); System.out.print(key + "\t"); BatchStatus status = batchStatusList[index]; if (status.code == 200) { System.out.println("change mime success"); } else { System.out.println(status.data.error); } index += 1; } return batchStatusList; } catch (QiniuException ex) { System.err.println(ex.response.toString()); } return null; }
说明:参数keyMimeMap:map型参数,key为待处理文件名,value为想要修改成的文件格式。 - 批量删除:
/** * 批量删除文件 * @param zone * @param auth * @param keyList 文件名列表, 单次批量请求的文件数量不得超过1000 * @param bucket * @return */ public static BatchStatus[] deleteFiles(Zone zone,Auth auth,String[] keyList,String bucket) { //构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(zone); BucketManager bucketManager = new BucketManager(auth, cfg); try { //单次批量请求的文件数量不得超过1000 BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations(); batchOperations.addDeleteOp(bucket, keyList); Response response = bucketManager.batch(batchOperations); BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class); for (int i = 0; i < keyList.length; i++) { BatchStatus status = batchStatusList[i]; String key = keyList[i]; System.out.print(key + "\t"); if (status.code == 200) { System.out.println("delete success"); } else { System.out.println(status.data.error); } } return batchStatusList; } catch (QiniuException ex) { System.err.println(ex.response.toString()); return null; } }
说明:参数keyList:想要获取状态的文件名数组。 - 批量移动:
/** * 批量移动文件,可用作重命名 * @param zone * @param auth * @param opts 操作集合 * @return */ public static BatchStatus[] moveOrRenameFiles(Zone zone,Auth auth,List<OptInfo> opts) { //构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(zone); BucketManager bucketManager = new BucketManager(auth, cfg); try { //单次批量请求的文件数量不得超过1000 BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations(); for (OptInfo opt : opts) { batchOperations.addMoveOp(opt.getFromBucket(), opt.getFromKey(), opt.getToBucket(), opt.getToKey()); } Response response = bucketManager.batch(batchOperations); BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class); for (int i = 0; i < opts.size(); i++) { BatchStatus status = batchStatusList[i]; String key = opts.get(i).getFromKey(); System.out.print(key + "\t"); if (status.code == 200) { System.out.println("move success"); } else { System.out.println(status.data.error); } } return batchStatusList; } catch (QiniuException ex) { System.err.println(ex.response.toString()); } return null; }
说明:参数opts:封装了源和目的文件名和空间名,代码如下:public class OptInfo { private String fromBucket; private String fromKey; private String toBucket; private String toKey; public OptInfo(String fromBucket, String fromKey, String toBucket, String toKey) { super(); this.fromBucket = fromBucket; this.fromKey = fromKey; this.toBucket = toBucket; this.toKey = toKey; } // //节省篇幅getters and setters不粘了 }
- 批量复制:
/** * 批量复制 * @param zone * @param auth * @param opts 操作集合 * @return */ public static BatchStatus[] copyFiles(Zone zone,Auth auth,List<OptInfo> opts) { //构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(zone); BucketManager bucketManager = new BucketManager(auth, cfg); try { BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations(); for (OptInfo opt : opts) { batchOperations.addCopyOp(opt.getFromBucket(), opt.getFromKey(), opt.getToBucket(), opt.getToKey()); } Response response = bucketManager.batch(batchOperations); BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class); for (int i = 0; i < opts.size(); i++) { BatchStatus status = batchStatusList[i]; String key = opts.get(i).getFromKey(); System.out.print(key + "\t"); if (status.code == 200) { System.out.println("copy success"); } else { System.out.println(status.data.error); } } return batchStatusList; } catch (QiniuException ex) { System.err.println(ex.response.toString()); } return null; }
说明:参数opts同上。 - 批量混合操作:
/** * 混合批量操作,单次批量请求的文件数量不得超过1000 * @param zone * @param auth * @param batchOperations 批量指令集 * 例batchOperations.addStatOps(bucket, "qiniu.png", "qiniu.jpg"); * batchOperations.addCopyOp(bucket, "qiniu.png", bucket, "qiniu_copy1.png"); * batchOperations.addMoveOp(bucket, "qiniu2.png", bucket, "qiniu3.png"); * batchOperations.addDeleteOp(bucket, "qiniu4.png"); * @return */ public static BatchStatus[] fixOpts(Zone zone,Auth auth,BucketManager.BatchOperations batchOperations) { //构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(zone); BucketManager bucketManager = new BucketManager(auth, cfg); try { Response response = bucketManager.batch(batchOperations); BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class); for (BatchStatus status : batchStatusList) { if (status.code == 200) { System.out.println("operation success"); } else { System.out.println(status.data.error); } } return batchStatusList; } catch (QiniuException ex) { System.err.println(ex.response.toString()); } return null; }
说明:参数batchOperations:批量指令集,可以删除、移动等指令,具体用法请看代码注释。
对上几个方法统一实验一下:
public static void main(String[] args) { Zone zone=Zone.zone0(); Auth auth=CredentialsManager.getAuth(); String bucket="你的空间名"; // //测试getFilesStat // getFilesStat(zone, auth, new String[]{"2.jpg","3.jpg","4.jpg","noFile.jpg"},bucket); // // //测试editFilesType // HashMap<String,String> keyMimeMap =new HashMap<>(); // keyMimeMap. put("2.jpg", "text/plain"); // keyMimeMap. put("4.jpg", "text/plain"); // editFilesType(zone, auth, keyMimeMap, bucket); // // //测试deleteFiles // deleteFiles(zone, auth, new String[]{"5.jpg","3.jpg","noFile.jpg"}, bucket); // // //测试moveOrRenameFiles // List<OptInfo> opts=new ArrayList<>(); // opts.add(new OptInfo(bucket, "as.txt", "bucket2", "as.txt")); // opts.add(new OptInfo(bucket, "sa.txt", "bucket2", "as.txt")); // moveOrRenameFiles(zone, auth, opts); // // //测试copyFiles // List<OptInfo> opts2=new ArrayList<>(); // opts2.add(new OptInfo(bucket, "fff.txt", "bucket2", "fff.txt")); // opts2.add(new OptInfo(bucket, "ggg.txt", "bucket2", "ggg.txt")); // copyFiles(zone, auth, opts2); // // //测试fixOpts // BatchOperations batchOperations=new BatchOperations(); // batchOperations.addDeleteOp(bucket, new String[]{"15.jpg","13.jpg","noFile.jpg"}); // batchOperations.addCopyOp(bucket, "mmm.txt", "bucket2", "mmm.txt"); // fixOpts(zone, auth, batchOperations); }
相关操作在前两篇博客已经说过了,在此不再多说。
好了,关于七牛云存储的介绍就写到这了!
七牛还提供了好多有意思的API,比如说音视频转码、图片鉴黄鉴暴、政治人物识别、水印、图片压缩等好多功能,如果你有需要或者感兴趣的话,请查看官方文档:https://developer.qiniu.com/dora
相关推荐
当涉及到文件处理,特别是云存储服务时,七牛云是一个备受青睐的选择。本文将详细介绍如何使用Spring Boot集成七牛云服务,实现文件的上传、下载和删除功能。 首先,我们需要在Spring Boot项目中引入七牛云的SDK。...
Java对七牛云的操作主要涉及的是使用Java SDK与七牛云服务进行交互,包括文件的上传、下载、管理等操作。七牛云是一家提供云端存储和CDN加速服务的公司,广泛应用于图片、视频等多媒体资源的托管。在Java中使用七...
在本文中,我们将深入探讨如何使用Java和JavaScript将图片上传到七牛云存储服务。七牛云是一个提供云端存储和CDN加速的平台,广泛应用于图片、视频等多媒体资源的托管。图片上传功能是其核心服务之一,为开发者提供...
JAVA访问七牛云存储,上传文件和下载文件需要的最新SDK
在IT行业中,七牛云存储是一个广泛使用的云存储服务,为开发者提供了强大的数据存储和处理能力。本话题主要关注如何在Android客户端上实现文件的删除以及获取上传所需的Token。 首先,我们要理解“七牛云存储”这个...
- 文件上传可以通过七牛云的SDK实现,例如使用Java SDK,调用相应的接口完成文件到七牛云存储空间的上传。 3. **Java SDK**: - 七牛云提供了Java开发包,方便开发者在Java环境中集成七牛云服务。 - 使用Java ...
Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar ...
在Java开发环境中,使用七牛云存储通常需要依赖相关的jar文件来实现与七牛云API的交互。以下是针对提供的四个jar文件的详细说明: 1. gson-2.2.4.jar:这是Google开源的Java库,全称为 Gson (Google JSON),它允许...
在IT行业中,七牛云存储是一个广泛使用的云存储服务,为开发者提供了强大的数据存储和处理能力。本示例将详细讲解如何使用Java API将文件上传到七牛云存储,通过一个简单的Demo实现来阐述关键步骤和核心代码。 首先...
在七牛云存储中,文件上传通常通过`PutPolicy`策略类来实现。C# SDK提供了`UploadManager`类,用于上传文件到七牛云。首先,你需要创建一个`PutPolicy`对象,设置上传的权限、过期时间等参数,然后生成上传凭证。...
在Java开发中,将图片上传至七牛云存储服务是一项常见的任务,这有助于实现云端的文件存储、分发和管理。七牛云提供了一套完善的API和服务,方便开发者集成到自己的应用中。以下是对这个主题的详细解释: 1. **七...
描述中提到的“亲测阿里云,七牛云,华为云可用”意味着这个S3库不仅与AWS的S3服务兼容,还经过了实际测试,可以在其他提供类似对象存储服务的中国云服务商上工作,如阿里云的OSS(Object Storage Service)、七牛云...
Java 七牛云SDK是针对七牛云存储服务的一个开发工具包,主要为开发者提供了方便的接口和功能,以便在Java应用程序中实现对七牛云的文件上传、下载、管理等操作。七牛云是一家专注于数据管理和分发的云服务商,提供高...
在本文中,我们将深入探讨如何将PbootCMS插件与七牛云和阿里云OSS集成,以优化图片资源的加载速度,提升网站性能。PbootCMS是一款基于PHP的轻量级网站内容管理系统,适用于快速构建企业网站。针对V3.1.2版本,我们...
4. 文件管理:FastAdmin后台将提供七牛云存储的文件管理功能,如查看、删除、下载等操作,这些操作都会通过七牛云的API执行。 5. CDN加速:七牛云的CDN服务可以无缝接入,通过设置CNAME,将静态资源指向七牛云的URL...
综上所述,这个“七牛云上传大文件DEMO”涵盖了使用七牛云服务进行大文件上传的关键技术点,包括分片上传、断点续传、上传凭证、JS SDK的使用以及错误处理等,是学习和实践云存储服务的一个实用示例。通过学习和理解...
使用这些jar文件进行七牛云存储开发时,首先需要在项目中导入这些依赖,然后通过七牛SDK提供的API进行初始化配置,如设置Access Key和Secret Key,创建Bucket对象,创建上传策略等。接着,可以调用SDK提供的方法进行...
图片上传、阿里云OSS、七牛云OSS、本地存储、FastDFS的文件存储配置,亲测有效。如果还不明白,查看教程https://blog.csdn.net/yaya_jn/article/details/124226092
Java与MySQL结合七牛云存储实现图片上传与删除的Demo是一个综合性的开发示例,它涵盖了Web开发中的几个关键知识点。以下是对这些知识点的详细解释: 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,...
用到了七牛云的开发者文档,可以在controller基础上增加一些功能,比如说,将回显的图片链接保存到数据库中,能实现用户头像的更改、上传等功能。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...