阿里云OSS(对象存储)的个人见解及使用方法

来源:互联网 发布:淘宝v2是什么意思 编辑:程序博客网 时间:2024/05/29 15:30

整理了一下阿里云的OSS(对象存储)相关的问题,记下来,以备后用。

·······································分·······································割·······································线·······································
介绍一下阿里云的OSS(对象存储)
能查到的官话就不在这里赘述了,按照我在使用过程中的实际体验来说,阿里的OSS我主要用来存储图片。
优点:
1、不占服务器内存;
2、图片压缩处理,访问页面事节省流量
3、可以对图片进行放大或缩小的无损处理(在我看来是无损,没有专业层面的评估,仅仅是视觉和体验上)。
4、图片格式处理
5、水印等一些小功能
6、样式可控并且很灵活,可以自由配置,下面有详细介绍。
缺点:
1、程序中文件上传OSS服务器时需要提供文件在服务器的路径,所以需要先上传到服务器上作为中转然后上传至阿里云服务器
2、阿里云OSS服务商存储的图片在微信端无法打开,QQ端报毒,原因大家懂的,不过可以处理,需要把图片访问的路径用域名映射掉,例如:
http:// Bucket名称.oss-cn-beijing.aliyuncs.com/XXX.png
上面的路径是无法在端打开的,这时需要用一个域名映射。
比如把http:// Bucket名称.oss-cn-beijing.aliyuncs.com/映射成”www.kakayu.cc”即可在微信端打开,QQ也不会报毒。

以上便是我对阿里云的OSS的一些薄见,欢迎拍砖
·······································分·······································割·······································线·······································
简述一下初始化设置方法:
1、在阿里云上开通OSS服务
2、新建一个Bucket即”文件存储的区域”可以用不同的Bucket来区分网站不同的业务,比如个人中心的头像之类的图片与商品详情的图片就可以用不同的Bucket区别开来。
3、上传您的图片或者文件访问生成的路径,看是否可以访问。
4、可以进行一些设置,例如Bucket的私有、共有化,根据具体需求
5、付费方式要搞灵清,包月或者按量付费有很大区别
6、如果在微信端或者腾讯旗下产品,请按照上面介绍的步骤来映射域名,如果有问题可以联系我
·······································分·······································割·······································线·······································
下面要上代码了呦!(o゚▽゚)o

假设我们现在需要上传一张图片到阿里云OSS服务器:

1、首先,需要把图片上传至服务器的一个路径

    public String uploadFile(MultipartFile file,            HttpServletRequest request, Integer type) throws IOException {        // 获取当前时间 用于文件夹拼接        String date = TimeUtils.formatDate(new Date(), "yyyy-MM-dd");        // 拼接图片上传路径 留言所在路径为wanzigswx的BUCKET下wzgs下的的message文件夹之下        String oldPath = "bucketName" + "/" + "bucket之下的目标路径" + "/upload/"                + date.replaceAll("-", "/") + "/items/";        // 创建路径        File filePath = new File(oldPath);        if (!filePath.exists() && !filePath.isDirectory()) {            filePath.mkdirs();        }        // 写入文件        String fileName = file.getOriginalFilename();        String newName = new Date().getTime()                + fileName.substring(fileName.lastIndexOf("."));        // 保存阿里云时读取文件路径        File tempFile = new File(oldPath, newName);        if (!tempFile.getParentFile().exists()) {            tempFile.getParentFile().mkdir();        }        if (!tempFile.exists()) {            tempFile.createNewFile();        }        file.transferTo(tempFile);        FileUploadController fileUploadController = new FileUploadController();        boolean flag = fileUploadController.saveFile(file, request, oldPath,                newName, "bucket之下的目标路径");        if (flag) {            return "SUCCESS";        } else {            return "ERROR";        }    }

2、上传文件至阿里云OSS服务器

    public boolean saveFile(MultipartFile file, HttpServletRequest request,            String oldPath, String newFileName, String typePath)            throws IOException {        String FILE_PATH = "linux下的绝对路径前缀" + oldPath;        String endpoint = "阿里云服务器例如华东二是:oss-cn-shenzhen.aliyuncs.com";        String accessKeyId = "accessKeyId";        String accessKeySecret = "accessKeySecret";        String fileName = file.getOriginalFilename();        String newName = "";        if (newFileName == null || "".equals(newFileName)) {            newName = new Date().getTime()                    + fileName.substring(fileName.lastIndexOf("."));        } else {            newName = newFileName;        }        // 创建OSSClient实例        // 保存阿里云时读取文件路径        OSSClient ossClient = new OSSClient(endpoint, accessKeyId,                accessKeySecret);        ossClient.putObject("bucketName", oldPath + newName, new File(FILE_PATH                + newName));        // 关闭client        ossClient.shutdown();        //删除文件        if (deleteFile(FILE_PATH + newName)) {            System.out.println("文件上传成功!");            return true;        } else {            System.out.println("文件上传失败!");        }        return false;    }

可以吧在阿里云上保存的路径完整的保存进库里,在读取的时候直接读出路径即可,也可以保存关键信息,例如只保存bucket之下的完整路径。

个人建议只保存bucket之下的完整路径,因为这样比较灵活,可以无缝更换bucket,当预知当前账户出问题或者bucket出问题时,只需提前拷贝文件,便可实现无缝转移,如果保存完整的路径则需要处理大量数据。如果只保存bucket之后的路径,可以制定规则,例如模块化存储的bucket皆不相同,同时方面了对不同bucket的样式控制(下面有介绍),也便于管理和业务转向,并且有利于后期的数据维护。

至此,简单的上传已经完成,下面是读取方式:

想必大家看到这里应该有些明白了,只需把文件存储在OSS的路径放在网站上即可实现访问。事实既是如此,读取时主要需要处理只保存了部分数据的连接,拼接成完整的链接即可访问。

至此基本的上传和读取功能已经完毕,下面介绍图片处理功能:

准备工作:

在概览页中单击图片处理,单击新建样式,可以建多个,根据不同的业务需求而定,要分灵清每个CSS的名字对应的处理样式。

使用方式非常简单:

只需在拼接好的完整的访问路径之后加上参数即可,参数格式如下:

String newPath = "完整路径" + "?x-oss-process=style/"                            + "需要追加样式的名称,即在准备工作时创建的CSS名称";

至此,阿里云OSS(对象存储)便介绍完毕了,欢迎拍砖。(o゚▽゚)o

原创粉丝点击