此处不讨论七牛云存储的优劣,为何要选择它什么什么的,只介绍使用方法,直接进入正题:
本文只介绍使用七牛云作为云存储的实现步骤,不介绍七牛云的其他功能(直播云,CDN什么的)。若要了解其他,请查看官方文档:
步骤:
从零开始↓
- 第一步,注册一个七牛账号。七牛官方网址:www.qiniu.com。
- 注册好之后,登录->进入控制管理台->选择对象存储->新建存储空间->填写表单->创建完成
说明:存储空间名(Bucket )是全局唯一的,公开空间中的文件可以直接用url访问,但是私有空间中的文件需要在url中加入授权凭证才可以访问。存储区域和访问控制以后是可以修改的,所以不必纠结选哪个。
建立好存储空间,就可以向里边存文件了,下边的内容将介绍如何在java中与存储空间做交互。
步骤:
- 引入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>
- 查看自己的Access Key和Secret Key,方法如下:进入七牛控制管理台->个人中心->用户管理,即可查看AK(Access Key)和SK(Secret Key),记录下这两个值。
- 正片到了,先上个代码,传个图片上去试试。
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值。
- 写个main()测试一下上边的上传方法:
public static void main(String[] args) { fileUpload(Zone.zone0(),CredentialsManager.getUploadCredential(),"D:\\qiniu\\test.jpg"); }
执行,打开七牛控制管理台->对象存储->你创建的空间名->内容管理,看看你的文件是不是传上去了!!
是不是很奇怪,我都还没有提供url,怎么就传上去了呢。没错了,七牛的SDK通过全局唯一的Bucket 直接拼接出了你空间对应的url,所以你只需要提供ak、sk和Bucket 就可以上传文件了。
但是在实际开发中,这些只能上传文件还远远不够,下面我们介绍七牛 SDK的其他功能
- 生成文件下载链接。仅仅把文件上传上去当然不行了,我们还要想办法访问它,下边分别介绍公有空间和私有空间生成文件下载链接的方法。废话不多说,直接上代码:
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=" ">中哦(公有空间),注意私有空间的地址是有寿命的。
- 上传文件还支持字节流、字符流上传和断点续传哦,直接上代码了:
/** * 字符组上传 * @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中使用七牛云实现文件云存储(二)
相关推荐
当涉及到文件处理,特别是云存储服务时,七牛云是一个备受青睐的选择。本文将详细介绍如何使用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 ...
在IT行业中,七牛云存储是一个广泛使用的云存储服务,为开发者提供了强大的数据存储和处理能力。本示例将详细讲解如何使用Java API将文件上传到七牛云存储,通过一个简单的Demo实现来阐述关键步骤和核心代码。 首先...
在Java开发环境中,使用七牛云存储通常需要依赖相关的jar文件来实现与七牛云API的交互。以下是针对提供的四个jar文件的详细说明: 1. gson-2.2.4.jar:这是Google开源的Java库,全称为 Gson (Google JSON),它允许...
在七牛云存储中,文件上传通常通过`PutPolicy`策略类来实现。C# SDK提供了`UploadManager`类,用于上传文件到七牛云。首先,你需要创建一个`PutPolicy`对象,设置上传的权限、过期时间等参数,然后生成上传凭证。...
Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar Java开发案例-springboot-09-整合七牛云实现文件上传-源代码+文档.rar ...
在Java开发中,将图片上传至七牛云存储服务是一项常见的任务,这有助于实现云端的文件存储、分发和管理。七牛云提供了一套完善的API和服务,方便开发者集成到自己的应用中。以下是对这个主题的详细解释: 1. **七...
描述中提到的“亲测阿里云,七牛云,华为云可用”意味着这个S3库不仅与AWS的S3服务兼容,还经过了实际测试,可以在其他提供类似对象存储服务的中国云服务商上工作,如阿里云的OSS(Object Storage Service)、七牛云...
综上所述,这个“七牛云上传大文件DEMO”涵盖了使用七牛云服务进行大文件上传的关键技术点,包括分片上传、断点续传、上传凭证、JS SDK的使用以及错误处理等,是学习和实践云存储服务的一个实用示例。通过学习和理解...
4. 文件管理:FastAdmin后台将提供七牛云存储的文件管理功能,如查看、删除、下载等操作,这些操作都会通过七牛云的API执行。 5. CDN加速:七牛云的CDN服务可以无缝接入,通过设置CNAME,将静态资源指向七牛云的URL...
在本文中,我们将深入探讨如何将PbootCMS插件与七牛云和阿里云OSS集成,以优化图片资源的加载速度,提升网站性能。PbootCMS是一款基于PHP的轻量级网站内容管理系统,适用于快速构建企业网站。针对V3.1.2版本,我们...
Java 七牛云SDK是针对七牛云存储服务的一个开发工具包,主要为开发者提供了方便的接口和功能,以便在Java应用程序中实现对七牛云的文件上传、下载、管理等操作。七牛云是一家专注于数据管理和分发的云服务商,提供高...
使用这些jar文件进行七牛云存储开发时,首先需要在项目中导入这些依赖,然后通过七牛SDK提供的API进行初始化配置,如设置Access Key和Secret Key,创建Bucket对象,创建上传策略等。接着,可以调用SDK提供的方法进行...
Java与MySQL结合七牛云存储实现图片上传与删除的Demo是一个综合性的开发示例,它涵盖了Web开发中的几个关键知识点。以下是对这些知识点的详细解释: 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,...
图片上传、阿里云OSS、七牛云OSS、本地存储、FastDFS的文件存储配置,亲测有效。如果还不明白,查看教程https://blog.csdn.net/yaya_jn/article/details/124226092
在本文中,我们将深入探讨如何使用C#与七牛云存储进行集成,通过提供的示例代码来理解其工作原理和实现细节。七牛云存储是一个强大的云端存储服务,为开发者提供高可用、高可靠的文件存储解决方案。C#是.NET框架下的...