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

整理了一下阿里云的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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值