五、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时最重要 ...
随机推荐
- vue的响应式原理:依赖追踪
在明白原理之前,我们有很多表面现象.使用场景需要记忆.明白了原理后,你会发现它们已经不需要记了,因为从原理出发,你自己都能把它们推导出来,一切是那么的自然而然.感觉就是:这还用记吗?很明显嘛! 之前我 ...
- springboot的缓存和redis缓存,入门级别教程
一.springboot(如果没有配置)默认使用的是jvm缓存 1.Spring框架支持向应用程序透明地添加缓存.抽象的核心是将缓存应用于方法,从而根据缓存中可用的信息减少执行次数.缓存逻辑是透明地应 ...
- 使用Visual Studio 2022 创建lib和dll并使用
对于一个经常写javaWeb的人来说,使用Visual Studio似乎没什么必要,但是对于使用ffi的人来说,使用c或c++编译器,似乎是必不可少的,下面我将讲述如何用Visual Studio 2 ...
- 【笔记整理】[案例]爱词霸翻译post请求
import json if __name__ == '__main__': import requests resp = requests.post( url="http://ifanyi ...
- Bert-vits2-2.3-Final,Bert-vits2最终版一键整合包(复刻生化危机艾达王)
近日,Bert-vits2发布了最新的版本2.3-final,意为最终版,修复了一些已知的bug,添加基于 WavLM 的 Discriminator(来源于 StyleTTS2),令人意外的是,因情 ...
- hszxoj 矿场搭建 [tarjan]
hszxoj 矿场搭建 题目描述 原题来自:HNOI 2012 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决 ...
- VA01/VA02/VA03 销售订单根据定价和步骤校验权限隐藏价格(二)
1.文档说明 1.1.内容回顾 之前发表过相关文章<VA01/VA02/VA03 销售订单根据定价和步骤校验权限隐藏价格>,本篇文章对上一篇文章做补充说明. 第一篇文章是通过拥有权限,则隐 ...
- MinIO FTP 断点续传
MinIO FTP 断点续传 对于minio来说,使用minio官方的Java SDK和开启FTP都是不支持断点续传的.对于要实现http接口的断点续传,可以通过调用Amazon S3 REST AP ...
- Odoo16—级联删除
我们在odoo中构建业务系统模块的时候,通常会使用one2many.many2one或many2many将模型进行关联,由此产生的数据也会通过外键发生关联.那么在odoo中删除数据的时候,如何关联删除 ...
- Blog Statistics Dec 1, 2021 - Dec 1, 2022
1. Overview Data Date: Dec 1, 2021 - Dec 1, 2022 Number of articles: 51 All Platform Total Visits: 3 ...