1. 程式人生 > 其它 >五、java操作swift物件儲存(官網樣例)

五、java操作swift物件儲存(官網樣例)

系列導航

一、swift物件儲存環境搭建

二、swift新增儲存策略

三、swift大物件--動態大物件

四、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 );
        
    }


}