`

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

阅读更多

在上一篇博客中,笔者简单介绍了从零开始,在java中使用七牛云实现文件的上传和下载。本章,笔者将介绍qiniu SDK的其他功能。

 

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

 

好了,直接进入正题,先介绍一下qiniu SDK的资源管理!

  1. 获取文件信息。就是获得已经上传到七牛云上的文件的详细信息,如上传时间、hash值、文件大小、类型等。直接上代码:
    	/**
    	 * 获取文件信息
    	 * @param zone
    	 * @param key
    	 * @param auth
    	 * @param bucket
    	 * @return
    	 */
    	public static FileInfo getFileInfo(Zone zone,String key,Auth auth,String bucket) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		try {
    			FileInfo fileInfo = bucketManager.stat(bucket, key);
    			System.out.println(fileInfo.hash);
    			System.out.println(fileInfo.fsize);
    			System.out.println(fileInfo.mimeType);
    			System.out.println(fileInfo.putTime);
    			return fileInfo;
    		} catch (QiniuException ex) {
    			System.err.println(ex.response.toString());
    		}
    		return null;
    	}
     参数:key:要获取文件信息的文件名;bucket:你的存储空间名。其他两个参数在上一篇文章中介绍过,此处就不再说了。测试一下:
    public static void main(String[] args) {
    	getFileInfo(Zone.zone0(),"文件名",CredentialsManager.getAuth(),bucket);
    }
     注:getAuth()是我自己写的方法,用于生成身份凭证,在前一章中有介绍。

    可以看到控制台打印出了该文件的信息。

  2. 修改文件类型:
    	/**
    	 * 修改文件类型
    	 * @param zone
    	 * @param key
    	 * @param auth
    	 * @param bucket
    	 * @param newMimeType
    	 */
    	public static void editFileType(Zone zone,String key,Auth auth,String bucket,String newMimeType) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		// 修改文件类型
    		try {
    			bucketManager.changeMime(bucket, key, newMimeType);
    		} catch (QiniuException ex) {
    			System.out.println(ex.response.toString());
    		}
    	}
    
    	public static void main(String[] args) {
    		
    		editFileType(Zone.zone0(), "要操作的文件名", CredentialsManager.getAuth(), bucket, "txt");
    	}
     前四个参数大家应该很熟悉了,最后一个参数newMimeType就是想要修改成的文件类型。

    例,先上传一个jpg文件,再用这个方法将该文件类型修改为txt,打开七牛控制管理台看看是不是修改成功了!

  3. 文件基本操作:删除、复制、移动。这三个操作大家再熟悉不过了吧,我们几乎每天都在做,此处将三个方法写在一起:
    	/**
    	 * 移动文件
    	 * @param zone
    	 * @param auth
    	 * @param fromBucket
    	 * @param fromKey
    	 * @param toBucket
    	 * @param toKey
    	 */
    	public static void move(Zone zone,Auth auth,String fromBucket,String fromKey,String toBucket,String toKey) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		try {
    			bucketManager.move(fromBucket, fromKey, toBucket, toKey);
    		} catch (QiniuException ex) {
    			// 如果遇到异常,说明移动失败
    			System.err.println(ex.code());
    			System.err.println(ex.response.toString());
    		}
    	}
    
    	/**
    	 * 复制文件
    	 * @param zone
    	 * @param auth
    	 * @param fromBucket
    	 * @param fromKey
    	 * @param toBucket
    	 * @param toKey
    	 */
    	public static void copy(Zone zone,Auth auth,String fromBucket,String fromKey,String toBucket,String toKey) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		try {
    			bucketManager.copy(fromBucket, fromKey, toBucket, toKey);
    		} catch (QiniuException ex) {
    			// 如果遇到异常,说明复制失败
    			System.err.println(ex.code());
    		}
    	}
    
    	/**
    	 * 刪除文件
    	 * @param key
    	 * @param auth
    	 * @param bucket
    	 */
    	public static void delete(Zone zone,String key,Auth auth,String bucket) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		try {
    			bucketManager.delete(bucket, key);
    		} catch (QiniuException ex) {
    			// 如果遇到异常,说明删除失败
    			System.err.println(ex.code());
    			System.err.println(ex.response.toString());
    		}
    	}
    
    	public static void main(String[] args) {
    		delete(Zone.zone0(), "文件名", CredentialsManager.getAuth(), "Bucket");
    		move(Zone.zone0(),CredentialsManager.getAuth(),"fromBucket","fromKey","toBucket","toKey");
    		copy(Zone.zone0(),CredentialsManager.getAuth(),"fromBucket","fromKey","toBucket","toKey");
    	}
     参数:fromBucket:源存储空间;toBucket:目标存储空间;fromKey:源文件名;toKey:目标文件名。

    注:move()方法和Linux中的mv一样,可以用于修改文件名。

  4. 设置文件生存时间:
    	/**
    	 * 设置文件生存时间
    	 * @param zone
    	 * @param key
    	 * @param auth
    	 * @param bucket
    	 */
    	public static void setAliveTime(Zone zone,String key,Auth auth,String bucket,int days) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		try {
    			bucketManager.deleteAfterDays(bucket, key, days);
    		} catch (QiniuException ex) {
    			System.err.println(ex.response.toString());
    		}
    	}
     说明:days:文件生存时间,单位(天)。该方法可以给文件设置生存时间或者给已经拥有生存时间的文件重新设置新的生存时间,当文件到达生存时间值时会被删除。
  5. 获取空间中的文件列表
    /**
    	 * 获取文件列表
    	 * @param zone
    	 * @param auth   授权凭证
    	 * @param bucket  存储空间名
    	 * @param prefix  文件名前缀
    	 * @param limit   每次迭代的长度限制,最大1000,推荐值 1000
    	 * @param delimiter  指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串
    	 * @return
    	 */
    	public static FileListIterator getFileList(Zone zone,Auth auth,String bucket,String prefix,int limit,String delimiter) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		// 列举空间文件列表
    		BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit,
    				delimiter);
    		while (fileListIterator.hasNext()) {
    			// 处理获取的file list结果
    			FileInfo[] items = fileListIterator.next();
    			for (FileInfo item : items) {
    				System.out.println(item.key);
    				System.out.println(item.hash);
    				System.out.println(item.fsize);
    				System.out.println(item.mimeType);
    				System.out.println(item.putTime);
    				System.out.println(item.endUser);
    			}
    		}
    		return fileListIterator;
    	}	
    	public static void main(String[] args) {
    		getFileList(Zone.zone0(),CredentialsManager.getAuth(),"存储空间名","aaa",2,"");
    	}
     说明:上边这个main()方法的意思是列举出该存储空间中,所有以aaa开头的文件,每组2个结果。运行结果如下:
    aaa/10.jpg	FmTNr_WGx43QRT1NTuoerXdGsaIo	6316	image/jpeg	15136865517365207	null
    aaa/11.jpg	FtBTc2L4VwyRm56l_0tTHt_hoy4a	5623	image/jpeg	15136865583082726	null
    下一批:
    aaa/12.jpg	FuWyOfil3ZgwGnBANuHJ265ubed2	6319	image/jpeg	15136865626490302	null
    下一批:
     存储空间的文件列表如下:


     
     注意:文件名可以使用 前缀+文件名 的方式,就像放进了不同的路径一样,便于检索。
  6. 抓取网络上的文件,存入空间:
    	/**
    	 * 抓取网络资源到空间
    	 * @param zone
    	 * @param auth
    	 * @param bucket
    	 * @param key
    	 * @param remoteSrcUrl
    	 * @return
    	 */
    	public static FetchRet fetchToSpace(Zone zone,Auth auth,String bucket,String key,String remoteSrcUrl) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		//String remoteSrcUrl = "http://devtools.qiniu.com/qiniu.png";
    		BucketManager bucketManager = new BucketManager(auth, cfg);
    		// 抓取网络资源到空间
    		try {
    			FetchRet fetchRet = bucketManager.fetch(remoteSrcUrl, bucket, key);
    			System.out.println(fetchRet.hash);
    			System.out.println(fetchRet.key);
    			System.out.println(fetchRet.mimeType);
    			System.out.println(fetchRet.fsize);
    			return fetchRet;
    		} catch (QiniuException ex) {
    			System.err.println(ex.response.toString());
    		}
    		return null;
    	}
    
    	public static void main(String[] args) {
    		fetchToSpace(Zone.zone0(),CredentialsManager.getAuth(),"存储空间名","test/qiniulogo","http://devtools.qiniu.com/qiniu.png");
    	}
    参数: remoteSrcUrl:网络资源的链接;key:给文件取个名字,如果设置成null,则存储的文件名默认设置成文件的hash值。

    七牛文件上传分为客户端上传(主要是指网页端和移动端等面向终端用户的场景)和服务端上传两种场景,服务端SDK在上传方面主要提供两种功能,一种是生成客户端上传所需要的上传凭证,另外一种是直接上传文件到云端。接下来介绍一下客户端上传凭证:

 

    客户端(移动端或者Web端)上传文件的时候,需要从客户自己的业务服务器获取上传凭证,而这些上传凭证是通过服务端的SDK来生成的,然后通过客户自己的业务API分发给客户端使用。根据上传的业务需求不同,七牛云Java SDK支持丰富的上传凭证生成方式。

 

 

private static String accessKey = "你的AK";
	private static String secretKey = "你的SK";
	private static String bucket = "你的存储空间名";
	
	public static Auth getAuth() {
		return Auth.create(accessKey, secretKey);
	}
	/**
	 * 生成上传凭证
	 */
	public static String getUploadCredential() {
		Auth auth = Auth.create(accessKey, secretKey);
		String upToken = auth.uploadToken(bucket);
		System.out.println(upToken);
		return upToken;
	}

	/**
	 * 获取客户端覆盖上传凭证
	 * 
	 * @param fileKey 被覆盖的文件名
	 */
	public static String getOverloadCredential(String fileKey) {
		Auth auth = Auth.create(accessKey, secretKey);
		String upToken = auth.uploadToken(bucket, fileKey);
		System.out.println(upToken);
		return upToken;
	}
	
	
	/**
	 * 获取客户端上传凭证(自定义返回值)
	 * @param returnBody 自定义返回值
	 * @param expireSeconds 有效期(秒)
	 * @return
	 */
	public static String getUploadCredential(String returnBody,long expireSeconds) {
		Auth auth = Auth.create(accessKey, secretKey);
		StringMap putPolicy = new StringMap();
		putPolicy.put("returnBody",returnBody);
//		putPolicy.put("returnBody",
//				"{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"fsize\":$(fsize)}");
		String upToken = auth.uploadToken(bucket, null, expireSeconds, putPolicy);
		System.out.println(upToken);
		return upToken;
	}

	/**
	 *  获取客户端上传凭证(自定义回调application/json格式)
	 * 
	 * @param callbackBody 自定义回调
	 *            application/json格式
	 * @param callbackUrl 回调地址
	 * @param expireSeconds 有效期
	 */
	public static void getUploadCredential(String callbackBody, String callbackUrl,long expireSeconds) {
		Auth auth = Auth.create(accessKey, secretKey);
		StringMap putPolicy = new StringMap();
//		putPolicy.put("callbackUrl", "http://api.example.com/qiniu/upload/callback");
//		putPolicy.put("callbackBody",
//				"{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"fsize\":$(fsize)}");
		putPolicy.put("callbackUrl", callbackUrl);
		putPolicy.put("callbackBody",callbackBody);
		// putPolicy.put("callbackBody",
		// "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"fsize\":$(fsize),\"user\":\"$(x:user)\",\"age\",$(x:age)}");
		putPolicy.put("callbackBodyType", "application/json");
		String upToken = auth.uploadToken(bucket, null, expireSeconds, putPolicy);
		// String upToken = auth.uploadToken(bucket, key, expireSeconds, putPolicy,
		// false);//false:允许添加额外参数
		System.out.println(upToken);
	}

	/**
	 * 获取客户端上传凭证(自定义回调application/x-www-form-urlencoded格式)
	 * 
	 * @param callbackBody 自定义回调
	 *            application/x-www-form-urlencoded格式
	 * @param callbackUrl 回调地址
	 * @param expireSeconds 有效期
	 */
	public static void getUploadCredential2(String callbackBody, String callbackUrl,long expireSeconds) {
		Auth auth = Auth.create(accessKey, secretKey);
		StringMap putPolicy = new StringMap();
//		putPolicy.put("callbackUrl", "http://api.example.com/qiniu/upload/callback");
//		putPolicy.put("callbackBody", "key=$(key)&hash=$(etag)&bucket=$(bucket)&fsize=$(fsize)");
		putPolicy.put("callbackUrl", callbackUrl);
		putPolicy.put("callbackBody", callbackBody);
//		long expireSeconds = 3600;
		String upToken = auth.uploadToken(bucket, null, expireSeconds, putPolicy);
		System.out.println(upToken);
	}
	public static void main(String[] args) {
		getUploadCredential();
		getOverloadCredential("testfile");
		getUploadCredential("{\\\"key\\\":\\\"$(key)\\\",\\\"hash\\\":\\\"$(etag)\\\",\\\"bucket\\\":\\\"$(bucket)\\\",\\\"fsize\\\":$(fsize)}\"",3600);
		getUploadCredential("{\\\"key\\\":\\\"$(key)\\\",\\\"hash\\\":\\\"$(etag)\\\",\\\"bucket\\\":\\\"$(bucket)\\\",\\\"fsize\\\":$(fsize)}", "http://api.example.com/qiniu/upload/callback",3600);
		getUploadCredential2("key=$(key)&hash=$(etag)&bucket=$(bucket)&fsize=$(fsize)", "http://api.example.com/qiniu/upload/callback",3600);
	}
 以上的代码包含了基本的上传凭证生成方法,还有一个带有文件处理的凭证此处没做介绍,我会在以后的章节单独介绍。

 

说一下代码中的callbody和returnbody,这两个参数是由基本字符串和取值符$()组成的,$()支持系统变量自定义变量,若要详细了解请看官方文档。若要支持自定义变量,需要将uploadToke最后一个参数设置为false:

String upToken = auth.uploadToken(bucket, null, expireSeconds, putPolicy,false);
 若有此需求,需自行修改方法。

 

自定义的参数名称必须以x:开头。例如客户端上传的时候指定了自定义的参数x:userx:age分别是Stringint类型。那么可以通过下面的方式引用:

 

putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"fsize\":$(fsize),\"user\":\"$(x:user)\",\"age\",$(x:age)}");
 
putPolicy.put("callbackBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"fsize\":$(fsize),\"user\":\"$(x:user)\",\"age\",$(x:age)}");
 服务端处理自定义返回值时,可以自定义一个上传结果的返回值类putRet,用来解析返回的json字符串。

 

 

class MyPutRet {
    public String key;
    public String hash;
    public String bucket;
    public long fsize;
}
 
// 解析上传成功的结果
MyPutRet  putRet = new Gson().fromJson(response.bodyString(), MyPutRet .class);
 

 

今天先写到这,qiniu SDK的其他功能请期待

 

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

  • 大小: 65.2 KB
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 ...

    七牛云存储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实现来阐述关键步骤和核心代码。 首先...

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

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

    java上传图片到七牛云

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

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

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

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

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

    fastadmin 七牛云

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

    七牛云上传大文件DEMO

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

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

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

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

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

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

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

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

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

    springboot java 七牛云

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

Global site tag (gtag.js) - Google Analytics