`

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

阅读更多

此处不讨论七牛云存储的优劣,为何要选择它什么什么的,只介绍使用方法,直接进入正题:

本文只介绍使用七牛云作为云存储的实现步骤,不介绍七牛云的其他功能(直播云,CDN什么的)。若要了解其他,请查看官方文档:

 

七牛云官方文档链接

 

步骤:

从零开始↓

  1. 第一步,注册一个七牛账号。七牛官方网址:www.qiniu.com。
  2. 注册好之后,登录->进入控制管理台->选择对象存储->新建存储空间->填写表单->创建完成


     
     说明:存储空间名(Bucket )是全局唯一的,公开空间中的文件可以直接用url访问,但是私有空间中的文件需要在url中加入授权凭证才可以访问。存储区域和访问控制以后是可以修改的,所以不必纠结选哪个。


     建立好存储空间,就可以向里边存文件了,下边的内容将介绍如何在java中与存储空间做交互。

步骤:

  1. 引入jar包。官方提供三种引入方式(笔者使用的maven方式,所以其他两种就不介绍了,如果想要了解可以点击这里查看官方文档)。在pom中加入依赖:
    <dependencies>
        <dependency>
          <groupId>com.qiniu</groupId>
          <artifactId>qiniu-java-sdk</artifactId>
          <version>7.2.6</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.squareup.okhttp3</groupId>
          <artifactId>okhttp</artifactId>
          <version>3.3.1</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.6.2</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.qiniu</groupId>
          <artifactId>happy-dns-java</artifactId>
          <version>0.1.4</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
     
  2. 查看自己的Access Key和Secret Key,方法如下:进入七牛控制管理台->个人中心->用户管理,即可查看AK(Access Key)和SK(Secret Key),记录下这两个值。
  3. 正片到了,先上个代码,传个图片上去试试。
    	private static String accessKey = "你的AK";
    	private static String secretKey = "你的SK";
    	private static String bucket = "你的存储空间名";
    	/**
    	 * 获取上传凭证
    	 */
    	public static String getUploadCredential() {
    		Auth auth = Auth.create(accessKey, secretKey);
    		String upToken = auth.uploadToken(bucket);
    		System.out.println(upToken);
    		return upToken;
    	}
    
    
    	/**
    	 * 文件上传
    	 * @param zone 
    	 *    华东	Zone.zone0()
    	 *    华北	Zone.zone1()
    	 *    华南	Zone.zone2()
    	 *    北美	Zone.zoneNa0()
    	 * @param upToken 上传凭证
    	 * @param localFilePath 需要上传的文件本地路径
    	 * @return
    	 */
    	public static DefaultPutRet fileUpload(Zone zone,String upToken,String localFilePath) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		// ...其他参数参考类注释
    		UploadManager uploadManager = new UploadManager(cfg);
    		// 默认不指定key的情况下,以文件内容的hash值作为文件名
    		String key = null;
    		try {
    			Response response = uploadManager.put(localFilePath, key, upToken);
    			// 解析上传成功的结果
    			DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    			System.out.println(putRet.key);
    			System.out.println(putRet.hash);
    			return putRet;
    		} catch (QiniuException ex) {
    			Response r = ex.response;
    			System.err.println(r.toString());
    			try {
    				System.err.println(r.bodyString());
    			} catch (QiniuException ex2) {
    				// ignore
    			}
    		}
    		return null;
    	}
     说明:上边的代码有两个方法,getUploadCredential()根据ak、sk和bucket生成一个上传凭证; fileUpload()实现文件上传,然后介绍一下fileUpload()的参数:

    zone:每个大区对应一个zone对象,对应关系如下:

    	 *    华东	Zone.zone0()
    	 *    华北	Zone.zone1()
    	 *    华南	Zone.zone2()
    	 *    北美	Zone.zoneNa0()

    upToken:getUploadCredential()生成的凭证

    localFilePath:需要上传的文件本地路径,如果是Linux环境,使用类似"/home/qiniu/test.png";如果是Windows环境,使用类似"D:\\qiniu\\test.png",注意:字符串中不要有空格,笔者就被这个坑过。

    返回值:DefaultPutRet对象,其中包含了已经上传文件的新文件名和文件hash值。

  4. 写个main()测试一下上边的上传方法:
    	public static void main(String[] args) {
    		fileUpload(Zone.zone0(),CredentialsManager.getUploadCredential(),"D:\\qiniu\\test.jpg");
    	}
     执行,打开七牛控制管理台->对象存储->你创建的空间名->内容管理,看看你的文件是不是传上去了!!

     是不是很奇怪,我都还没有提供url,怎么就传上去了呢。没错了,七牛的SDK通过全局唯一的Bucket 直接拼接出了你空间对应的url,所以你只需要提供ak、sk和Bucket 就可以上传文件了。

但是在实际开发中,这些只能上传文件还远远不够,下面我们介绍七牛 SDK的其他功能

  1. 生成文件下载链接。仅仅把文件上传上去当然不行了,我们还要想办法访问它,下边分别介绍公有空间和私有空间生成文件下载链接的方法。废话不多说,直接上代码:
    	private static String accessKey = "你的AK";
    	private static String secretKey = "你的SK";
    	private static String bucket = "你的存储空间名";
    	
    	public static Auth getAuth() {
    		return Auth.create(accessKey, secretKey);
    	}
    	
    	/**
    	 * 公有空间返回文件URL
    	 * @param fileName
    	 * @param domainOfBucket
    	 * @return
    	 */
    	public static String publicFile(String fileName,String domainOfBucket) {
    		String encodedFileName=null;
    		try {
    			encodedFileName = URLEncoder.encode(fileName, "utf-8");
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		String finalUrl = String.format("%s/%s", domainOfBucket, encodedFileName);
    		System.out.println(finalUrl);
    		return finalUrl;
    	}
    	
    	/**
    	 * 私有空间返回文件URL
    	 * @param auth
    	 * @param fileName
    	 * @param domainOfBucket
    	 * @param expireInSeconds
    	 * @return
    	 */
    	public static String privateFile(Auth auth,String fileName,String domainOfBucket,long expireInSeconds) {
    		String encodedFileName=null;
    		try {
    			encodedFileName = URLEncoder.encode(fileName, "utf-8");
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		String publicUrl = String.format("%s/%s", domainOfBucket, encodedFileName);
    		String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds);
    		System.out.println(finalUrl);
    		return finalUrl;
    	}
    	
    	public static void main(String[] args) {
    		publicFile("文件名","你的domainOfBucket");
    		//privateFile(CredentialsManager.getAuth(),"文件名","你的domainOfBucket",3600);
    	}
     说一下参数:fileName:没错,就是上传文件时,返回的DefaultPutRet对象中的key属性,也就是七牛控制管理台中看到的文件名。

              domainOfBucket:你的存储空间对应的domain,可以在控制台中查看,就是下边这个。

     

     auth:私有空间文件的访问凭证,通过getAuth()生成的值

     expireInSeconds:私有空间文件的访问链接超时时间,单位(秒)

     

     执行一下,直接在浏览器中粘贴生成的地址,看能不能访问到文件。该链接即为文件固定连接,可以放在html中的<img src=" ">中哦(公有空间),注意私有空间的地址是有寿命的。

  2. 上传文件还支持字节流、字符流上传和断点续传哦,直接上代码了:
    /**
    	 * 字符组上传
    	 * @param zone
    	 * @param upToken
    	 * @return
    	 */
    	public static DefaultPutRet charArrayUpload(Zone zone,String upToken) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		// ...其他参数参考类注释
    		UploadManager uploadManager = new UploadManager(cfg);
    		// 默认不指定key的情况下,以文件内容的hash值作为文件名
    		String key = null;
    		try {
    			byte[] uploadBytes = "hello qiniu cloud".getBytes("utf-8");
    
    			try {
    				Response response = uploadManager.put(uploadBytes, key, upToken);
    				// 解析上传成功的结果
    				DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    				System.out.println(putRet.key);
    				System.out.println(putRet.hash);
    				return putRet;
    			} catch (QiniuException ex) {
    				Response r = ex.response;
    				System.err.println(r.toString());
    				try {
    					System.err.println(r.bodyString());
    				} catch (QiniuException ex2) {
    					// ignore
    				}
    			}
    		} catch (UnsupportedEncodingException ex) {
    			// ignore
    		}
    		return null;
    	}
    
    	/**
    	 * 数据流上传
    	 * @param zone
    	 * @param upToken
    	 * @return
    	 */
    	public static DefaultPutRet streamUpload(Zone zone,String upToken) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		// ...其他参数参考类注释
    		UploadManager uploadManager = new UploadManager(cfg);
    		// ...生成上传凭证,然后准备上传
    		// 默认不指定key的情况下,以文件内容的hash值作为文件名
    		String key = null;
    		try {
    			byte[] uploadBytes = "test streamUpload \n hello qiniu cloud".getBytes("utf-8");
    			ByteArrayInputStream byteInputStream = new ByteArrayInputStream(uploadBytes);
    			try {
    				Response response = uploadManager.put(byteInputStream, key, upToken, null, null);
    				// 解析上传成功的结果
    				DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    				System.out.println(putRet.key);
    				System.out.println(putRet.hash);
    				return putRet;
    			} catch (QiniuException ex) {
    				Response r = ex.response;
    				System.err.println(r.toString());
    				try {
    					System.err.println(r.bodyString());
    				} catch (QiniuException ex2) {
    					// ignore
    				}
    			}
    		} catch (UnsupportedEncodingException ex) {
    			// ignore
    		}
    		return null;
    	}
    
    	/**
    	 * 断点续传
    	 * @param zone
    	 * @param upToken
    	 * @param localFilePath
    	 * @return
    	 */
    	public static DefaultPutRet breakPointUpload(Zone zone,String upToken,String localFilePath) {
    		// 构造一个带指定Zone对象的配置类
    		Configuration cfg = new Configuration(zone);
    		// ...其他参数参考类注释
    		// 如果是Windows情况下,格式是 D:\\qiniu\\test.png
    		// 默认不指定key的情况下,以文件内容的hash值作为文件名
    		String key = null;
    		String localTempDir = Paths.get(System.getenv("java.io.tmpdir"), bucket).toString();
    		try {
    			// 设置断点续传文件进度保存目录
    			FileRecorder fileRecorder = new FileRecorder(localTempDir);
    			UploadManager uploadManager = new UploadManager(cfg, fileRecorder);
    			try {
    				Response response = uploadManager.put(localFilePath, key, upToken);
    				// 解析上传成功的结果
    				DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    				System.out.println(putRet.key);
    				System.out.println(putRet.hash);
    				return putRet;
    			} catch (QiniuException ex) {
    				Response r = ex.response;
    				System.err.println(r.toString());
    				try {
    					System.err.println(r.bodyString());
    				} catch (QiniuException ex2) {
    					// ignore
    				}
    			}
    		} catch (IOException ex) {
    			ex.printStackTrace();
    		}
    		// MyPutRet myPutRet=response.jsonToObject(MyPutRet.class);
    		return null;
    	}
    
    	
    	public static void main(String[] args) {
    		//fileUpload(Zone.zone0(),CredentialsManager.getUploadCredential(),"D:\\qiniu\\test.jpg");
    		//charArrayUpload(Zone.zone0(),CredentialsManager.getUploadCredential());
    		//streamUpload(Zone.zone0(),CredentialsManager.getUploadCredential());
    		breakPointUpload(Zone.zone0(),CredentialsManager.getUploadCredential(),"D:\\qiniu\\test.jpg");
    	}
     你是否注意到了下边这个变量,
    		// 默认不指定key的情况下,以文件内容的hash值作为文件名
    		String key = null;

    不错,上传文件的时候是可以自定义文件名的,默认是以hash值作为文件名,如果你有这方面需求,可以把该变量放到方法的参数里,像这样:

    public static DefaultPutRet streamUpload(Zone zone,String upToken,String key) {
    
             //......
    
    }

     

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

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

  • 大小: 6.7 KB
  • 大小: 88.8 KB
  • 大小: 26.2 KB
  • 大小: 29.4 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 api一个简单的demo实现

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

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

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

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

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

    Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar

    Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar ...

    java上传图片到七牛云

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

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

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

    七牛云上传大文件DEMO

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

    fastadmin 七牛云

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

    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提供的方法进行...

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

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

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

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

    C#七牛云存储完整示例代码

    在本文中,我们将深入探讨如何使用C#与七牛云存储进行集成,通过提供的示例代码来理解其工作原理和实现细节。七牛云存储是一个强大的云端存储服务,为开发者提供高可用、高可靠的文件存储解决方案。C#是.NET框架下的...

Global site tag (gtag.js) - Google Analytics