五、java操作swift物件儲存(官網樣例)
阿新 • • 發佈:2021-07-26
系列導航
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 ); } }