java開發之阿里雲對象存儲OSS和雲數據庫Memcache的使用

web開發中標配:aliyun ECS(阿里雲服務器),aliyun RDS(阿里雲數據庫),aliyun OSS(阿里雲對象存儲),aliyun Memcache(阿里雲緩存數據庫)。java

今天就介紹下OSS和Memcache的使用方法(開通方法就不詳細介紹了)。web

1 OSS使用demo數據庫

首先導入oss開發包json

1 <dependency>
2             <groupId>com.aliyun.oss</groupId>
3             <artifactId>aliyun-sdk-oss</artifactId>
4             <version>2.0.6</version>
5 </dependency>

導入開發包後開發代碼以下:緩存

package com.cyparty.security.utils;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * Created by Shadow on 2016/4/28.
 */
public class OssUtil {
    public static void main(String[] args) {
        getOSSUrl("E:/1.jpg");
    }


    public static String getOSSUrl(String filepath){
        try {
            File file = new File(filepath);
            String file_name=filepath.split("/")[filepath.split("/").length-1];
            String OssUrl=null;
            if (file.exists() && file.length() > 0) {
                OssUrl= OssUtil.getOssFilePath(file_name, filepath);
            }
            return OssUrl;

        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    /**
     * 獲取上傳到OSS的圖片鏈接
     *
     * @param fileName       完整的文件名
     * @param uploadFilePath 文件的路徑
     * @return 來自OSS的Url地址
     */
    private static String getOssFilePath(String fileName, String uploadFilePath) {
        String uri = "";
        // 建立OSSClient對象
        //todo:注意查看要連接的bucket服務器位置(shanghai or beijing or hangzhou)
        String bucket_name="laihui";
        String bucket_source="oss-cn-shanghai.aliyuncs.com";
        String accessKeyId="XXXXXXXX";
        String secretAccessKey="XXXXXXXXXXXXXX";
        OSSClient client = new OSSClient(bucket_source, accessKeyId, secretAccessKey);
        //上傳圖片
        String key="security/images/"+Utils.getCurrenTimeStamp()/1000+"-"+fileName; //指定文件上傳到bucket下面的那個文件夾下及文件名
        boolean isSuccess= uploadFile(client, bucket_name, key, uploadFilePath);//指定bucket

        if (isSuccess) {
            //uri = "laihui.oss-cn-shanghai.aliyuncs.com/" + key;
            uri = bucket_name+bucket_source +"/"+ key;
        }
        return uri;
    }

    /**
     * 將本地圖片上傳至OSS的方法
     *
     * @param client     OSS外網域名
     * @param bucketName bucket的名字
     * @param key        圖片的名字
     * @param filePath   所上傳圖片的路徑
     * @return boolean類型的成功與失敗狀態
     */
    private static boolean uploadFile(OSSClient client, String bucketName, String key, String filePath) {
        int MAX_TRY = 3;
        int downloadTurn = 0;
        boolean uploadSuccess = false;
        while (downloadTurn < MAX_TRY) {
            try {
                File file = new File(filePath);
                if ((!file.exists()) || file.length() == 0) {
                    uploadSuccess = false;
                    break;
                }
                ObjectMetadata objectMeta = new ObjectMetadata();
                objectMeta.setContentLength(file.length());
                // 能夠在metadata中標記文件類型

                if (!client.doesObjectExist(bucketName, key)) {
                    //System.out.println("開始上傳文件" + filePath);
                    InputStream input = new FileInputStream(file);
                    client.putObject(bucketName, key, input, objectMeta);
                    System.out.println(filePath+"上傳成功!");
                    uploadSuccess = true;
                    break;
                } else {
                    uploadSuccess = true;
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return uploadSuccess;
    }
}
accessKeyId和secretAccessKey查看方法以下圖,選中我的帳號-->點擊-->accessKeys-->查看

2 Memcache的使用服務器

首先導入開發包-->下載地址,導入項目中後,具體代碼以下
package com.cyparty.laihui.utilities;

import com.alibaba.fastjson.JSONObject;
import net.spy.memcached.AddrUtil;
import net.spy.memcached.BinaryConnectionFactory;
import net.spy.memcached.MemcachedClient;
import net.spy.memcached.internal.OperationFuture;

public class Memcache {
    private static MemcachedClient cache=null;
    public static MemcachedClient getCache()
    {
        final String host = "XXXXXXX.m.XXXXXXX.ocs.aliyuncs.com"; //控制檯上的「內網地址」
        final String port = "11211"; //默認端口 11211,不用改
        if(cache==null)
        {
            try {
                cache = new MemcachedClient(new BinaryConnectionFactory(), AddrUtil.getAddresses(host + ":" + port));
            }
            catch (Exception e)
            {
                cache=null;
                System.out.println("getCache Error:"+e.getMessage());
            }
        }
        return cache;
    }
    public static JSONObject getMemcache(String where){
        JSONObject result=new JSONObject();
        try {
            MemcachedClient cacheClient=getCache();
            if (cacheClient.get(where)==null){
                result.put("cache_status","0");
                return result;
            }else {
                return (JSONObject)cacheClient.get(where);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        result.put("status","0");
        return result;
    }

    public static void setMemcache(String where,JSONObject resultObject) {

        MemcachedClient cacheClient = null;
        try {

            cacheClient = getCache();


            //向OCS中存一個key爲"ocs"的數據,便於後面驗證讀取數據
            String key = where;
            JSONObject value =resultObject;
            int expireTime = 60*60*24*10; // 過時時間10day,單位s; 從寫入時刻開始計時,超過expireTime s後,該數據過時失效,沒法再讀出;
            OperationFuture future = cacheClient.set(key, expireTime, value);
            System.out.println("Set操做完成key爲"+key);

            future.get(); //  確保以前(mc.set())操做已經結束
            //執行get操做,從緩存中讀數據,讀取key爲"ocs"的數據
            System.out.println("Get操做:" + cache.get(key));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void setMemcache(String token,int id,int expireTime) {
        MemcachedClient cacheClient = null;
        try {
            cacheClient = getCache();
            //向OCS中存一個key爲"ocs"的數據,便於後面驗證讀取數據
            String key = token;
            int value =id;
            if(expireTime<=0) {
                expireTime = 60 * 60 * 2; // 過時時間,單位s; 從寫入時刻開始計時,超過expireTime s後,該數據過時失效,沒法再讀出;
            }
            OperationFuture future = cacheClient.set(key, expireTime, value);
            System.out.println("Set操做完成!連接爲"+key);

            future.get(); //  確保以前(mc.set())操做已經結束

            //執行get操做,從緩存中讀數據,讀取key爲"ocs"的數據
            System.out.println("Get操做:" + cache.get(key));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
相關文章
相關標籤/搜索