`

从零开始,在java中使用七牛云实现文件云存储(三)

阅读更多

在上一篇博客中,笔者简单介绍了qiniu SDK的资源管理以及各种上传凭证的生成,本章笔者将介绍qiniu SDK的资源批量管理功能。

 

上篇文章的链接:从零开始,在java中使用七牛云实现文件云存储(二)

 

进入正题!

  1. 批量获取文件状态:
    /**
    	 * 批量获取文件状态
    	 * @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:想要获取状态的文件名数组。
  2. 批量修改文件类型:
    /**
    	 * 批量修改文件类型,单次批量请求的文件数量不得超过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为想要修改成的文件格式。
  3. 批量删除:
    /**
    	 * 批量删除文件
    	 * @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:想要获取状态的文件名数组。
  4. 批量移动:
    /**
    	 * 批量移动文件,可用作重命名
    	 * @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不粘了
    }
     
  5. 批量复制:
    /**
    	 * 批量复制
    	 * @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同上。
  6. 批量混合操作:
    	/**
    	 * 混合批量操作,单次批量请求的文件数量不得超过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

1
0
分享到:
评论

相关推荐

    java springboot 七牛云文件上传,下载,删除

    当涉及到文件处理,特别是云存储服务时,七牛云是一个备受青睐的选择。本文将详细介绍如何使用Spring Boot集成七牛云服务,实现文件的上传、下载和删除功能。 首先,我们需要在Spring Boot项目中引入七牛云的SDK。...

    java对七牛云的操作(包含所有jar包)

    Java对七牛云的操作主要涉及的是使用Java SDK与七牛云服务进行交互,包括文件的上传、下载、管理等操作。七牛云是一家提供云端存储和CDN加速服务的公司,广泛应用于图片、视频等多媒体资源的托管。在Java中使用七...

    java上传图片到七牛云 七牛云 七牛 图片上传 demo JS java

    在本文中,我们将深入探讨如何使用Java和JavaScript将图片上传到七牛云存储服务。七牛云是一个提供云端存储和CDN加速的平台,广泛应用于图片、视频等多媒体资源的托管。图片上传功能是其核心服务之一,为开发者提供...

    免费七牛云存储JAVA访问SDK

    JAVA访问七牛云存储,上传文件和下载文件需要的最新SDK

    七牛云存储删除文件和获取token

    在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开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar ...

    七牛云文件批量上传,下载C#

    在七牛云存储中,文件上传通常通过`PutPolicy`策略类来实现。C# SDK提供了`UploadManager`类,用于上传文件到七牛云。首先,你需要创建一个`PutPolicy`对象,设置上传的权限、过期时间等参数,然后生成上传凭证。...

    七牛云存储7.1.3版java需要的jar文件

    在Java开发环境中,使用七牛云存储通常需要依赖相关的jar文件来实现与七牛云API的交互。以下是针对提供的四个jar文件的详细说明: 1. gson-2.2.4.jar:这是Google开源的Java库,全称为 Gson (Google JSON),它允许...

    上传文件到七牛云存储的java api一个简单的demo实现

    在IT行业中,七牛云存储是一个广泛使用的云存储服务,为开发者提供了强大的数据存储和处理能力。本示例将详细讲解如何使用Java API将文件上传到七牛云存储,通过一个简单的Demo实现来阐述关键步骤和核心代码。 首先...

    java上传图片到七牛云

    在Java开发中,将图片上传至七牛云存储服务是一项常见的任务,这有助于实现云端的文件存储、分发和管理。七牛云提供了一套完善的API和服务,方便开发者集成到自己的应用中。以下是对这个主题的详细解释: 1. **七...

    aws亚马逊的S3库实现,亲测阿里云,七牛云,华为云可用

    描述中提到的“亲测阿里云,七牛云,华为云可用”意味着这个S3库不仅与AWS的S3服务兼容,还经过了实际测试,可以在其他提供类似对象存储服务的中国云服务商上工作,如阿里云的OSS(Object Storage Service)、七牛云...

    fastadmin 七牛云

    4. 文件管理:FastAdmin后台将提供七牛云存储的文件管理功能,如查看、删除、下载等操作,这些操作都会通过七牛云的API执行。 5. CDN加速:七牛云的CDN服务可以无缝接入,通过设置CNAME,将静态资源指向七牛云的URL...

    七牛云上传大文件DEMO

    综上所述,这个“七牛云上传大文件DEMO”涵盖了使用七牛云服务进行大文件上传的关键技术点,包括分片上传、断点续传、上传凭证、JS SDK的使用以及错误处理等,是学习和实践云存储服务的一个实用示例。通过学习和理解...

    PbootCMS插件图片接入七牛云阿里云OSS加速图片资源展示

    在本文中,我们将深入探讨如何将PbootCMS插件与七牛云和阿里云OSS集成,以优化图片资源的加载速度,提升网站性能。PbootCMS是一款基于PHP的轻量级网站内容管理系统,适用于快速构建企业网站。针对V3.1.2版本,我们...

    java七牛云jar包及播放视频插件

    Java 七牛云SDK是针对七牛云存储服务的一个开发工具包,主要为开发者提供了方便的接口和功能,以便在Java应用程序中实现对七牛云的文件上传、下载、管理等操作。七牛云是一家专注于数据管理和分发的云服务商,提供高...

    七牛云存储7.1.3版java所需要的jar文件

    使用这些jar文件进行七牛云存储开发时,首先需要在项目中导入这些依赖,然后通过七牛SDK提供的API进行初始化配置,如设置Access Key和Secret Key,创建Bucket对象,创建上传策略等。接着,可以调用SDK提供的方法进行...

    阿里云OSS+七牛云和文件存储本地+FastDFS的文件存储代码

    图片上传、阿里云OSS、七牛云OSS、本地存储、FastDFS的文件存储配置,亲测有效。如果还不明白,查看教程https://blog.csdn.net/yaya_jn/article/details/124226092

    java mysql 七牛云存储上传删除图片demo

    Java与MySQL结合七牛云存储实现图片上传与删除的Demo是一个综合性的开发示例,它涵盖了Web开发中的几个关键知识点。以下是对这些知识点的详细解释: 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,...

    springboot java 七牛云

    用到了七牛云的开发者文档,可以在controller基础上增加一些功能,比如说,将回显的图片链接保存到数据库中,能实现用户头像的更改、上传等功能。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

Global site tag (gtag.js) - Google Analytics