系列导航

一、swift对象存储环境搭建

二、swift添加存储策略

三、swift大对象--动态大对象

四、swift大对象--静态态大对象

五、java操作swift对象存储(官网样例)

六、java操作swift对象存储(resultful方式实现)

七、java操作swift对象存储(动态大对象)

八、java操作swift对象存储(静态大对象)

swift的官方提供了一些java操作swift对象存储的操作方法,但是内容比较简单稍微复杂的没有找到合适的样例,后面我会使用http请求的方式实现

一、jar包

org-json.jar 需要使用maven的同学们自己找到依赖转换一下就可以

二、基础方法

package base;

//官网的操作样例
import org.javaswift.joss.client.core.ContainerPaginationMap;
import org.javaswift.joss.client.factory.AccountConfig;
import org.javaswift.joss.client.factory.AccountFactory;
import org.javaswift.joss.client.factory.AuthenticationMethod;
import org.javaswift.joss.model.Account;
import org.javaswift.joss.model.Container;
import org.javaswift.joss.model.PaginationMap;
import org.javaswift.joss.model.StoredObject;
import java.io.File;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap; public class SwiftClientWork {
private static final String module = SwiftClientWork.class.getName(); static String authurl = "http://192.168.0.1:8080/auth/v1.0";
static String username = "admin:admin";
static String password = "admin"; /**
* 身份证存储容器
*/
static Account account ; private static SwiftClientWork instance = null; public static synchronized SwiftClientWork getInstance(){
if(instance==null){
instance = new SwiftClientWork();
}
return instance;
} static {
try{
AccountConfig config = new AccountConfig();
config.setUsername(username);
config.setPassword(password);
config.setAuthUrl(authurl); config.setAuthenticationMethod(AuthenticationMethod.BASIC);
account = new AccountFactory(config).createAccount();
}catch (Exception e){
e.printStackTrace();
}
} //给账户设置Temp-Url-Key
public void setTempUrlKey(String key){
account.setAndSaveMetadata("Temp-Url-Key", key);
System.out.println(account.getMetadata());
} /**
* CREATE A CONTAINER
* @param containerName
*/
public void createContainer(String containerName){
try{
Container container = account.getContainer(containerName);
container.create();
}catch (Exception e){
e.printStackTrace();
}
} /**
* DELETE A CONTAINER
* @param containerName
*/
public void deleteContainer(String containerName){
try{
Container container = account.getContainer(containerName);
container.delete();
}catch (Exception e){
e.printStackTrace();
}
} /**
* CREATE AN OBJECT
* @param containerName
* @param objectName
* @param inFilePath
*/
public StoredObject createObject(String containerName, String objectName, String inFilePath){
try{
/**
StoredObject object = container.getObject("dog.png");
object.uploadObject(new File("/dog.png"));
System.out.println("Public URL: "+object.getPublicURL());
*/
Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
object.uploadObject(new File(inFilePath));
/*InputStream input = new FileInputStream(new File(inFilePath));
object.uploadObject(input);
input.close();*/ /*System.out.println("Public URL: "+object.getPublicURL());
System.out.println("Last modified: "+object.getLastModified());
System.out.println("ETag: "+object.getEtag());
System.out.println("Content type: "+object.getContentType());
System.out.println("Content length: "+object.getContentLength());*/
return object;
}catch (Exception e){
e.printStackTrace();
}
return null;
} /**
*
* @param containerName
* @param objectName
* @param inFile
* @return
*/
public StoredObject createObject(String containerName, String objectName, File inFile){
try{
/**
StoredObject object = container.getObject("dog.png");
object.uploadObject(new File("/dog.png"));
System.out.println("Public URL: "+object.getPublicURL());
*/
Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
object.uploadObject(inFile);
/*InputStream input = new FileInputStream(new File(inFilePath));
object.uploadObject(input);
input.close();*/ /*System.out.println("Public URL: "+object.getPublicURL());
System.out.println("Last modified: "+object.getLastModified());
System.out.println("ETag: "+object.getEtag());
System.out.println("Content type: "+object.getContentType());
System.out.println("Content length: "+object.getContentLength());*/
return object;
}catch (Exception e){
e.printStackTrace();
}
return null;
} /**
* ADD/UPDATE OBJECT METADATA
* @param containerName
* @param objectName
* @param metadatas
*/
public void addOrUpdateObjectMetadata(String containerName, String objectName, Map<String, Object> metadatas){
try{
Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
Map<String, Object> metadata = new TreeMap<String, Object>(); for(String key: metadatas.keySet()){
String value = metadatas.get(key).toString();
System.out.println("key:"+key+" vlaue:"+value); metadata.put(key, value);
} //Map<String, Object> metadata = new TreeMap<String, Object>();
//metadata.put("key", "value");
object.setMetadata(metadata);
}catch (Exception e){
e.printStackTrace();
}
} //上传一个带属性值的对象
public StoredObject createObjectWithMetadata(String containerName, String objectName, String inFilePath, Map<String, Object> metadatas){
try{ Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
object.uploadObject(new File(inFilePath)); Map<String, Object> metadata = new TreeMap<String, Object>();
for(String key: metadatas.keySet()){
String value = metadatas.get(key).toString();
System.out.println("key:"+key+" vlaue:"+value);
metadata.put(key, value);
}
object.setMetadata(metadata); return object;
}catch (Exception e){
e.printStackTrace();
}
return null;
} /**
* LIST OWNED CONTAINERS
*/
public Collection<Container> containerList(){
try{
Collection<Container> containers = account.list();
for (Container currentContainer : containers) {
System.out.println(currentContainer.getName());
} return containers;
}catch (Exception e){
e.printStackTrace();
}
return null;
} /**
* LIST A CONTAINER’S CONTENT
* @param containerName
* @return
*/
public Collection<StoredObject> containerObjects(String containerName){
try{
Container container = account.getContainer(containerName);
Collection<StoredObject> objects = container.list();
for (StoredObject currentObject : objects) {
System.out.println(currentObject.getName());
} return objects;
}catch (Exception e){
e.printStackTrace();
}
return null;
} /**
* LIST A CONTAINER’S CONTENT
* @param containerName
* @param prefix
* @param pageSize
* @return
*/
public void containerObjectsPage(String containerName,String prefix,int pageSize){
try{
Container container = account.getContainer(containerName); //ContainerPaginationMap(Container container, String prefix, Integer pageSize)
PaginationMap paginationMap = new ContainerPaginationMap(container,prefix,pageSize); //list(PaginationMap paginationMap, int page)
//Returns a number equal to pageSize of Container elements, starting with the first element after the Container named the same as marker.
//后面这个参数经过测试不起任何作用
Collection<StoredObject> objects =container.list(paginationMap,50000); for (StoredObject currentObject : objects) {
System.out.println(currentObject.getName());
} /* Iterator iter = container.list(paginationMap,1).iterator();
while(iter.hasNext()){
StoredObject object = (StoredObject) iter.next();
String fileName = object.getName();
System.out.println(fileName);
}
*/ }catch (Exception e){
e.printStackTrace();
} } public Map getObjectMetadaTest(String containerName, String objectName) {
try {
Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
Map<String, Object> returnedMetadata = object.getMetadata();
// for (String name : returnedMetadata.keySet()) {
// System.out.println("META / " + name + ": " + returnedMetadata.get(name));
// }
return returnedMetadata;
} catch (Exception e) {
System.out.println("该对象没有元数据属性------------->");
//e.printStackTrace();
}
return null;
} /**
* RETRIEVE AN OBJECT’S METADATA
* @param containerName
* @param objectName
*/
public void getObjectMetada(String containerName, String objectName){
try{
Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
Map<String, Object> returnedMetadata = object.getMetadata();
for (String name : returnedMetadata.keySet()) {
System.out.println("META / "+name+": "+returnedMetadata.get(name));
}
}catch (Exception e){
e.printStackTrace();
}
} /**
* RETRIEVE AN OBJECT
* @param containerName
* @param objectName
* @param downPath
*/
public void getObject(String containerName, String objectName, String downPath){
try{
Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
object.downloadObject(new File(downPath)); /*System.out.println("Public URL: "+object.getPublicURL());
System.out.println("Last modified: "+object.getLastModified());
System.out.println("ETag: "+object.getEtag());
System.out.println("Content type: "+object.getContentType());
System.out.println("Content length: "+object.getContentLength());*/
}catch (Exception e){
e.printStackTrace();
}
} /**
* DELETE AN OBJECT
* @param containerName
* @param objectName
*/
public void deleteObject(String containerName, String objectName){
try{
Container container = account.getContainer(containerName);
StoredObject object = container.getObject(objectName);
object.delete();
}catch (Exception e){
e.printStackTrace();
}
} //获取get权限的tempurl
//second 有效时间 单位秒
public void getObjectGetTempUrl(String containerName, String objectName,int second ){
try{ Container container = account.getContainer(containerName); StoredObject object = container.getObject(objectName);
String url=object.getTempGetUrl(second); url = url +"&inline";
System.out.println(url); }catch (Exception e){
e.printStackTrace();
}
} //获取put权限的tempurl
//second 有效时间 单位秒
public void getObjectPutTempUrl(String containerName, String objectName,int second ){
try{ Container container = account.getContainer(containerName); StoredObject object = container.getObject(objectName);
String url=object.getTempPutUrl(second); url = url +"&inline";
System.out.println(url); }catch (Exception e){
e.printStackTrace();
}
} }

三、调用的主方法

package mian;

import java.io.File;
import java.util.HashMap;
import java.util.Map; import org.javaswift.joss.model.Container;
import org.javaswift.joss.model.StoredObject; import base.SwiftClientWork; //官网操作swift 调用
public class SwiftClientWorkMain { /**
* @param args
*/
public static void main(String[] args) {
SwiftClientWork swiftClientWork = new SwiftClientWork(); //创建容器
swiftClientWork.createContainer("Container1"); //删除容器
swiftClientWork.deleteContainer("Container1"); //上传对象(本地文件路径上传)
swiftClientWork.createObject("Container1", "1.zip", "E://1//1.zip"); //上传对象(本地文件路径上传)
File file = new File("E://1//1.zip");
swiftClientWork.createObject("Container1", "2.zip", file); //给现有的对象增加后者更新属性
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "123123123");
swiftClientWork.addOrUpdateObjectMetadata( "Container1","2.zip", map); //上传一个带属性值的对象
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "123123123");
swiftClientWork.createObjectWithMetadata("Container1","3.zip", "E://1//1.zip" ,map ); //查看容器列表
swiftClientWork.containerList(); //查看容器中的对象列表
swiftClientWork.containerObjects("containerName1"); //对容器中的对象可以进行前缀和返回条数的限制 如下:对象名称前缀为3 且结果值返回5条记录
swiftClientWork.containerObjectsPage("containerName1","3",5); //查看对象的属性
swiftClientWork.getObjectMetada("Container1","3.zip"); //下载对象
swiftClientWork.getObject( "Container1","3.zip","E://8.zip"); //删除对象
swiftClientWork.deleteObject( "Container1","3.zip"); //获取tempurl测试
swiftClientWork.getObjectTempUrl("bigContainer", "1.jpg",600 ); } }

五、java操作swift对象存储(官网样例)的更多相关文章

  1. swift对象存储

    swift对象存储 简介 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性.对象存储,用于 ...

  2. swift对象存储安装

    对象存储服务概览 OpenStack对象存储是一个多租户的对象存储系统,它支持大规模扩展,可以以低成本来管理大型的非结构化数据,通过RESTful HTTP 应用程序接口. 它包含下列组件: 代理服务 ...

  3. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  4. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  5. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 二

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  6. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  7. 九、Swift对象存储服务(双节点搭建)

    九.Swift对象存储服务(双节点搭建) 要求:Controoler节点需要2块空盘 Compute节点需要再加2块空盘 本次搭建采用Controller 和 Compute双节点节点做swift组件 ...

  8. Java操作Sqoop对象

    Windows下使用Eclipse工具操作Sqoop1.4.6对象 Sqoop是用来在关系型数据库与Hadoop之间进行数据的导入导出,Windows下使用Eclipse工具操作时,需要先搭建好Had ...

  9. Golang 调用 aws-sdk 操作 S3对象存储

    Golang 调用 aws-sdk 操作 S3对象存储 前言 因为业务问题,要写一个S3对象存储管理代码,由于一直写Go,所以这次采用了Go,Go嘛,快,自带多线程,这种好处就不用多说了吧. 基础的功 ...

  10. java 覆盖hashCode()深入探讨 代码演示样例

    java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...

随机推荐

  1. 火山引擎DataTester升级MAB功能,助力企业营销决策

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 DataTester,火山引擎推出的 AB 测试与智能优化平台,近日宣布对其 MAB(Multi-armed Ba ...

  2. 带你玩转 Vite + Vue3 高低版本常用玩法

    一.首先来个 Vite 的通用简介 Vite 是一种新型前端构建工具,在我们保险前端项目中已经推动并应用很久了,Vite 能够显著降低构建时间,提升前端开发效率. 它主要由两部分组成: 一个开发服务器 ...

  3. SpringBoot发送虚拟请求~

    1.创建一个测试用的TestController @RestController public class TestController { @GetMapping("/test" ...

  4. 2023年国家基地“楚慧杯”网络安全实践能力竞赛初赛-Crypto+Misc WP

    Misc ez_zip 题目 4096个压缩包套娃 我的解答: 写个脚本直接解压即可: import zipfile name = '附件路径\\题目附件.zip' for i in range(40 ...

  5. 一篇可供参考的 K8S 落地实践经验

    前言 k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署. 扩缩和管理 本篇文章将分享 k8s v1.18.8 的安装,以及其面板,监控,部署服务,使用Ingr ...

  6. String与StringBuilder的互相转换

    String与StringBuilder的互相转换 String转StringBulider StringBuilder sb = new StringBuilder(); sb.append(use ...

  7. Hash-based Message Authentication Code(HMAC)

    一.引言 在现代信息安全领域,消息认证码(Message Authentication Code,简称MAC)起着至关重要的作用.Hash-based Message Authentication C ...

  8. CentOS 7.3 操作系统 详解安装手册

    CentOS 7.3 操作系统 安装手册 在安装ESPC前(绿盟WAF.IPS等外置日志中心),需要确保已经在计算机中正确安装CentOS 7.3 x86_64(内核版本为3.10.0-514.el7 ...

  9. zabbix 默认消息

    故障事件: {TRIGGER.NAME}监控状态: {TRIGGER.STATUS}报警严重性: {TRIGGER.SEVERITY}触发结果: {TRIGGER.URL}告警时间:{EVENT.DA ...

  10. C# / VB.NET 获取PDF文档的数字签名信息

    文档中的数字签名具有不可否认性,可有效防伪防篡改.对文档中已有的数字签名信息,可通过一定方法获取,下面通过程序代码介绍如何来实现.程序中,使用了Spire.PDF.dll,版本:6.11.6,可自行在 ...