五、java操作swift对象存储(官网样例)
系列导航
六、java操作swift对象存储(resultful方式实现)
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对象存储(官网样例)的更多相关文章
- swift对象存储
swift对象存储 简介 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性.对象存储,用于 ...
- swift对象存储安装
对象存储服务概览 OpenStack对象存储是一个多租户的对象存储系统,它支持大规模扩展,可以以低成本来管理大型的非结构化数据,通过RESTful HTTP 应用程序接口. 它包含下列组件: 代理服务 ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 二
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- 九、Swift对象存储服务(双节点搭建)
九.Swift对象存储服务(双节点搭建) 要求:Controoler节点需要2块空盘 Compute节点需要再加2块空盘 本次搭建采用Controller 和 Compute双节点节点做swift组件 ...
- Java操作Sqoop对象
Windows下使用Eclipse工具操作Sqoop1.4.6对象 Sqoop是用来在关系型数据库与Hadoop之间进行数据的导入导出,Windows下使用Eclipse工具操作时,需要先搭建好Had ...
- Golang 调用 aws-sdk 操作 S3对象存储
Golang 调用 aws-sdk 操作 S3对象存储 前言 因为业务问题,要写一个S3对象存储管理代码,由于一直写Go,所以这次采用了Go,Go嘛,快,自带多线程,这种好处就不用多说了吧. 基础的功 ...
- java 覆盖hashCode()深入探讨 代码演示样例
java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...
随机推荐
- 手机成绩分析软件排行榜TOP10下载
随着智能手机的普及和移动应用的快速发展,手机成绩分析软件越来越受到学生.家长和教育机构的关注.这些软件可以帮助用户方便地记录.分析和管理学生成绩,提供个性化的学习指导和反馈.在本文中,将详细介绍202 ...
- Java八股面试题整理(1)
1.为什么Java代码可以实现一次编写,到处运行? 参考答案 JVM(Java虚拟机)是Java跨平台的关键. 在程序运行前,Java源代码(.java)需要经过编译器编译成字节码(.class).在 ...
- 0x04.信息收集
探针 被动:借助网上的一些接口查询或者网上已经获取到的,查看历史信息. 主动:使用工具,从本地流量出发,探测目标信息,会发送大量流量到对方服务器上. 谷歌语法 懒人语法:https://pentest ...
- git 同时推送多个远程仓库
今天遇到个git的问题:需要同时提交到两个远程仓库 解决方法: git add . git commit -m '提交信息' git remote -v git remote add old_orig ...
- 常见速率协议的CDR带宽情况
100G PAM4 4MHZ 802.3/OIF-CEI 50G PAM4 4MHZ 802.3/OIF-CEI 28G PAM4 4MHZ 802.3/OIF-CEI 28G PAM4 4MHZ 8 ...
- 在自动化测试时,Python常用的几个加密算法,你有用到吗
本文分享自华为云社区<『加密算法』| 自动化测试时基于Python常用的几个加密算法实现,你有用到吗?>,作者:虫无涯 . 写在前边 这几天做自动化测试,遇到一个问题,那就是接口的请求的密 ...
- 2023年奔走的总结---吉特日化MES 智能搬运AGV 篇三
<2023年奔走的总结---吉特日化MES 项目趣事 篇一> <2023年奔走的总结---吉特日化MES 制药项目 篇二> <2023年奔走的总结---吉特日化MES 智 ...
- 如何利用烛龙和谷歌插件优化CLS(累积布局偏移)
简介 CLS 衡量的是页面的整个生命周期内发生的每次意外布局偏移的最大突发性_布局偏移分数_.布局变化的发生是因为浏览器倾向于异步加载页面元素.更重要的是,您的页面上可能存在一些初始尺寸未知的媒体元素 ...
- keycloak~从login-status-iframe页面总结如何跨域传值~续
keycloak~从login-status-iframe相关文章,可阅读我的这两篇keycloak~从login-status-iframe页面总结如何跨域传值,keycloak~对接login-s ...
- 通过印模生成电子印章-Java源代码
以下代码是处理印模图片的核心代码,通过以下代码可以将公章图片转换为电子印章图片. 制作方式分为四步: 1.在白纸上加盖印章: 2.把加盖印章的白纸扫描,形成图片: 3.将图片通过下面的代码进行自动透明 ...