阿里云服务(一)——OSS

    阿里电子商务迄今是中国最大的电商网站,各个厂商都在去模仿。就像google的大数据处理,Hadoop的思想等等,只有做出了一些成绩,起了带头羊,那么将会是非常吃香的。从今天开始简单学习了解一下阿里的各种云服务。今天先看一下OSS。
OSS(Open Storage Service)开放云存储服务,是阿里云对外的提供的海量,安全和高可靠的云存储服务。目前阿里的所有云服务都是收费,大家可以到官网上了解:http://www.aliyun.com/product/oss

OSS,通俗一点理解就像是一块硬盘用来存储东西呢,只不过,它是由很多服务器,通过类似负载均衡,raid等各种技术,搭建起来的云存储,类似我们经常使用的百度云盘,360云盘等。我们可以将我们服务,数据存放上去,方便,安全,实现云。好了,简单来说,OSS,既然是存储东西用的,我们就需要学会像类似IO流对电脑硬盘操作一样,学习一下对OSS云存储的上传,删除等操作。

首先是开通OSS服务器后,会有endpoint,跟地址;accessKeyId,类似用户名;accessKeySecret,类似密码;buketName:第一层文件夹的名字,一个用户可以创建十个bucketName,类似于我们的C,D,E,F盘符;accessUrl,很明显用户可以通过浏览器访问的地址。例如我们上传一个html文件,我们就可以通过"accessUrl/bucketName/目录/文件名.html,来进行访问。我在这里负责一个是页面静态化的功能,将动态的JSP页面生成静态的html页面,然后上传的OSS服务器,返回地址,让用户直接访问静态页面,这样就大大加快访问的速度。    这里突然想到一点不沾边的话语“物极必反,否极泰来”,最开始是单纯的静态页面,我们一直追求动态页面,现在又需要转会到静态页面,各有各的好处,所以技术这东西,没有一个好与不好,只是针对方面不同而已了。

好,首先需要我们创建一个OSS信息实体类,OSSConfigure.Java:

view plain copy

print?

    import java.io.IOException;
    import java.util.Properties;
    public class OSSConfigure {
        private String endpoint;
        private String accessKeyId;
        private String accessKeySecret;
        private String bucketName;
        private String accessUrl;
        public OSSConfigure() {
        }
        /**
         * 通过配置文件.properties文件获取,这几项内容。
         * 
         * @param storageConfName
         * @throws IOException
         */
        public OSSConfigure(String storageConfName) throws IOException {
            Properties prop = new Properties();
            prop.load(this.getClass().getClassLoader()
                    .getResourceAsStream("conf/" + storageConfName));
            endpoint = prop.getProperty("endpoint").trim();
            accessKeyId = prop.getProperty("accessKeyId").trim();
            accessKeySecret = prop.getProperty("accessKeySecret").trim();
            bucketName = prop.getProperty("bucketName").trim();
            accessUrl = prop.getProperty("accessUrl").trim();
        }
        public OSSConfigure(String endpoint, String accessKeyId,
                String accessKeySecret, String bucketName, String accessUrl) {
            this.endpoint = endpoint;
            this.accessKeyId = accessKeyId;
            this.accessKeySecret = accessKeySecret;
            this.bucketName = bucketName;
            this.accessUrl = accessUrl;
        }
        public String getEndpoint() {
            return endpoint;
        }
        public void setEndpoint(String endpoint) {
            this.endpoint = endpoint;
        }
        public String getAccessKeyId() {
            return accessKeyId;
        }
        public void setAccessKeyId(String accessKeyId) {
            this.accessKeyId = accessKeyId;
        }
        public String getAccessKeySecret() {
            return accessKeySecret;
        }
        public void setAccessKeySecret(String accessKeySecret) {
            this.accessKeySecret = accessKeySecret;
        }
        public String getBucketName() {
            return bucketName;
        }
        public void setBucketName(String bucketName) {
            this.bucketName = bucketName;
        }
        public String getAccessUrl() {
            return accessUrl;
        }
        public void setAccessUrl(String accessUrl) {
            this.accessUrl = accessUrl;
        }
    }

然后是一个工具类,这里需要提出的OSS服务器,上所有的都是对象,没有文件夹的概念,上传文件,直接写好路劲,他会自动创建。另外这里有一个入口OSSClient,很多方法都是通过它来实现的,类似于门面模式吧:

view plain copy

print?

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import org.springframework.web.multipart.MultipartFile;
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.model.ObjectListing;
    import com.aliyun.oss.model.ObjectMetadata;
    /**
     * 对OSS服务器进行上传删除等的处理
    * @ClassName: OSSManageUtil 
    * @Description:  
    * @author liujh
    * @date 2015-3-26 上午10:47:00 
    *
     */
    public class OSSManageUtil {
        /**
         * 上传OSS服务器文件
        * @Title: uploadFile 
        * @Description: 
        * @param @param ossConfigure
        * @param @param file
        * @param @param remotePath
        * @param @return
        * @param @throws Exception    设定文件 
        * @return String    返回类型 
        * @throws
         */
        public static String uploadFile(OSSConfigure ossConfigure,File file,String remotePath) throws Exception{
            InputStream fileContent=null;
            fileContent=new FileInputStream(file);
            OSSClient ossClient=new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());
             String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\","/")+"/";
            //创建上传Object的Metadata
            ObjectMetadata objectMetadata=new ObjectMetadata();
            objectMetadata.setContentLength(fileContent.available());
            objectMetadata.setCacheControl("no-cache");
            objectMetadata.setHeader("Pragma", "no-cache");
            objectMetadata.setContentType(contentType(file.getName().substring(file.getName().lastIndexOf("."))));
            objectMetadata.setContentDisposition("inline;filename=" + file.getName());
            //上传文件
            ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + file.getName(), fileContent, objectMetadata);
            System.out.println(ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName());
            return ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName();
        }
        /**
         * 根据key删除OSS服务器上的文件
        * @Title: deleteFile 
        * @Description: 
        * @param @param ossConfigure
        * @param @param filePath    设定文件 
        * @return void    返回类型 
        * @throws
         */
        public static void deleteFile(OSSConfigure ossConfigure,String filePath){
            OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(),ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());
            ossClient.deleteObject(ossConfigure.getBucketName(), filePath);
        }
         /**
         * Description: 判断OSS服务文件上传时文件的contentType
         * @Version1.0
         * @param FilenameExtension 文件后缀
         * @return String 
         */
         public static String contentType(String FilenameExtension){
            if(FilenameExtension.equals("BMP")||FilenameExtension.equals("bmp")){return "image/bmp";}
            if(FilenameExtension.equals("GIF")||FilenameExtension.equals("gif")){return "image/gif";}
            if(FilenameExtension.equals("JPEG")||FilenameExtension.equals("jpeg")||
               FilenameExtension.equals("JPG")||FilenameExtension.equals("jpg")||
               FilenameExtension.equals("PNG")||FilenameExtension.equals("png")){return "image/jpeg";}
            if(FilenameExtension.equals("HTML")||FilenameExtension.equals("html")){return "text/html";}
            if(FilenameExtension.equals("TXT")||FilenameExtension.equals("txt")){return "text/plain";}
            if(FilenameExtension.equals("VSD")||FilenameExtension.equals("vsd")){return "application/vnd.visio";}
            if(FilenameExtension.equals("PPTX")||FilenameExtension.equals("pptx")||
                FilenameExtension.equals("PPT")||FilenameExtension.equals("ppt")){return "application/vnd.ms-powerpoint";}
            if(FilenameExtension.equals("DOCX")||FilenameExtension.equals("docx")||
                FilenameExtension.equals("DOC")||FilenameExtension.equals("doc")){return "application/msword";}
            if(FilenameExtension.equals("XML")||FilenameExtension.equals("xml")){return "text/xml";}
            return "text/html";
         }
    }

当然这里仅仅写了两个通用方法,我们可以在官网上下载对应的API,来进行查询学习,其实挺简单的。

反思一下吧,最近学习的少了,可能和加班有关系,更大的是自己的心态吧,调整好心态继续努力吧。

About the Author

Avatar photo

今生在线

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据