精华内容
下载资源
问答
  • oss对象存储
    千次阅读
    2022-07-06 15:57:44

    随着互联网的高速发展,越来越多的企业业务迁移上云,业务对于云上的存储需求量也快速增加。这时候就需要一种方法让数据处理起来更简单,另外支持扩展性、便于访问信息。在这特定的环境下,衍生出了OSS对象存储产品。什么是OSS对象存储?OSS对象存储有什么优势?

    什么是OSS对象存储?OSS对象存储是为企业用户提供的一种安全稳定、低成本、高可用的非结构化云存储服务,解决用户海量数据管理问题;且使用对象存储可以在互联网任意位置存储和访问,具有无上限、弹性拓展、多类型等特点。

    OSS对象存储主要有以下几个优势:

    1、稳定可靠:对象存储具有多重冗余架构设计;且基于高可用架构设计,消除单节点故障,跨数据中心的副本冗余,能够保障服务的高可用性,确保数据业务的持续性;

    2、安全合规:支持服务端加密、客户端加密、防盗链、IP黑白名单、细粒度权限管控、日志审计、WORM特性,并获得多项合规认证,满足企业数据安全与合规要求;

    3、智能存储:存储空间无上限,无需担心扩容问题,能够实现存储需求的弹性伸缩;并且提供多种数据处理能力,无缝对接快快云服务器等产品,从而提高业务灵活性;

    4、低成本:无需传统硬件的采购、部署和运维,从而节省了运维工作和托管成本,有效避免存储及带宽资源的闲置浪费,降低企业的数据管理与存储成本。

    更多相关内容
  • PHP一键上传图片到阿里云OSS对象存储,自己编写的代码,有一些注释。已在本地测试,运行成功。注意:1.有阿里云的对象存储;2.要获取AccessKey及找准Endpoint,修改代码中相应的部分;3.点击即上传,只支持图片格式...
  • OSS 对象存储

    2021-06-16 14:44:04
    对象存储 OSS 海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。...

    对象存储 OSS

    海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。

    1600914642936

    入口:https://www.aliyun.com

    1600915424559

    1600915597153

    快速入门

    开始使用阿里云OSS

    阿里云对象存储OSS(Object Storage Service)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音视频在内的各种数据文件。

    初次使用阿里云OSS,请您先了解阿里云OSS常见问题阿里云OSS使用限制

    阿里云OSS将数据文件以对象(Object)的形式上传到存储空间(Bucket)中。您可以进行以下操作:

    • 创建一个或者多个存储空间,向每个存储空间中添加一个或多个文件。
    • 通过获取已上传文件的地址进行文件的分享和下载。
    • 通过修改存储空间或文件的读写权限(ACL)来设置访问权限。
    • 通过阿里云管理控制台、各种便捷工具以及丰富的SDK包执行基本和高级OSS操作。

    快速开始

    OSS的基本操作流程如下:

    quickstart

    1. 开通OSS服务
    2. 创建存储空间
    3. 上传对象
    4. 下载对象
    5. 删除文件
    6. 删除存储空间

    官方开发文档地址

    创建存储空间

    开通阿里云OSS服务后,您需要首先创建存储空间(Bucket)来存储文件。

    使用OSS管理控制台

    您可以根据以下步骤,使用OSS管理控制台创建存储空间。

    1. 登录OSS管理控制台

    2. 单击Bucket列表,之后单击创建Bucket。

      您也可以单击概览,之后单击右侧的创建Bucket。

    3. 在创建Bucket页面配置Bucket参数。

    具体参考: 官方开发文档

    1600917174586

    使用Java操作

    官方文档地址

    pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>
    
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.9</version>
        </dependency>
    
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
    
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>
    

    application.yml

    alioss:
      endpoint: oss-cn-hangzhou.aliyuncs.com
      accessKeyId: <AccessKeyId>
      accessKeySecret: <AccessKeySecret>
      bucketName: xinguan-parent
    

    OssEntity

    package com.xiaoge.system.entity.oss;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * @author NieChangan
     */
    @ConfigurationProperties(prefix = "alioss")
    @Component
    @Data
    public class OssEntity {
    
        private String endpoint;
    
        private String accessKeyId;
    
        private String accessKeySecret;
    
        private String bucketName;
    }
    

    AliOssService

    package com.xiaoge.system.service;
    
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    
    /**
     * @author NieChangan
     */
    public interface AliOssService {
    
        /**
         * 创建存储空间
         */
        void createBucket();
    
        /**
         * 上传文件
         * @param file 文件对象
         * @return
         */
        String upload(MultipartFile file);
    
        /**
         * 下载文件
         * @throws IOException
         */
        void download(String fileName) throws IOException;
    
        /**
         * 列举文件
         */
        void listFile();
    
        /**
         * 删除文件
         */
        void deleteFile(String fileName);
    
    
    }
    

    AliOssServiceImpl

    package com.xiaoge.system.service.impl;
    
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.model.*;
    import com.xiaoge.system.entity.oss.OssEntity;
    import com.xiaoge.system.service.AliOssService;
    import org.joda.time.DateTime;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.Date;
    import java.util.UUID;
    
    /**
     * @author NieChangan
     */
    @Service
    public class AliOssServiceImpl implements AliOssService, InitializingBean {
    
        @Autowired
        private OssEntity ossEntity;
    
        private String endpoint;
        private String accessKeyId;
        private String accessKeySecret;
        private String bucketName;
    
        @Override
        public void afterPropertiesSet() throws Exception {
             Endpoint以杭州为例,其它Region请按实际情况填写。
            endpoint = ossEntity.getEndpoint();
             阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
            accessKeyId = ossEntity.getAccessKeyId();
            accessKeySecret = ossEntity.getAccessKeySecret();
            bucketName = ossEntity.getBucketName();
        }
    
        @Override
        public void createBucket() {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            if (ossClient.doesBucketExist(bucketName)) {
                throw new RuntimeException(bucketName + "在对象存储的Bucket列表中已经存在");
            }
    
            // 创建存储空间。
            ossClient.createBucket(bucketName);
    
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    
        @Override
        public String upload(MultipartFile file) {
            //上传地址
            String uploadUrl = null;
    
            try {
                //判断oss实例是否存在:如果不存在则创建,如果存在则获取
                // 创建OSSClient实例。
                OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
                if (!ossClient.doesBucketExist(bucketName)) {
                    //创建bucket
                    ossClient.createBucket(bucketName);
                    //设置oss实例的访问权限:公共读
                    ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
                }
    
                //获取上传文件流
                InputStream inputStream = file.getInputStream();
    
                //构建日期路径:avatar/2020/07/31/文件名
                String datePath = new DateTime().toString("yyyy/MM/dd");
    
                //文件名:uuid.扩展名
                //获取上传文件的全名称
                String original = file.getOriginalFilename();
                //去掉uuid中生成的-
                String fileName = UUID.randomUUID().toString().replaceAll("-", "");
                //截取掉文件获得扩展名
                String fileType = original.substring(original.lastIndexOf("."));
                //uuid+.jpg/.png
                String newName = fileName + fileType;
                // yyyy/MM/dd+/uuid+.jpg/.png
                fileName = datePath + "/" + newName;
    
                //如果想要实现图片的预览效果,一定要设置一下几个点
                //1.设置文件 ACL为反正不能为私有  要么是公共读,要么是公共读写
                //2.一定要设置文本类型为(image/jpg)
                ObjectMetadata objectMetadata = new ObjectMetadata();
                //设置公共读权限
                objectMetadata.setObjectAcl(CannedAccessControlList.PublicRead);
                //设置类型
                objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
    
                //文件上传至阿里云
                ossClient.putObject(bucketName, fileName, inputStream, objectMetadata);
    
                // 关闭OSSClient。
                ossClient.shutdown();
    
                //默认十年不过期
                Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
                //bucket名称  文件名   过期时间
                uploadUrl = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString();
    
                //获取url地址
                //uploadUrl = "https://" + bucketName + "." + endPoint + "/" + fileName;
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return uploadUrl.substring(0, uploadUrl.indexOf("?"));
            //return uploadUrl;
        }
    
        @Override
        public void download(String fileName) throws IOException {
            // <yourObjectName>从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
            String objectName = fileName;
    
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
            InputStream content = ossObject.getObjectContent();
            if (content != null) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                while (true) {
                    String line = reader.readLine();
                    if (line == null) {
                        break;
                    }
                    System.out.println("\n" + line);
                }
                // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
                content.close();
            }
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    
        @Override
        public void listFile() {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            // ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。
            ObjectListing objectListing = ossClient.listObjects(bucketName);
            // objectListing.getObjectSummaries获取所有文件的描述信息。
            for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                System.out.println(" - " + objectSummary.getKey() + "  " +
                        "(size = " + objectSummary.getSize() + ")");
            }
    
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    
        @Override
        public void deleteFile(String fileName) {
            // <yourObjectName>从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
            String objectName = fileName;
    
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            // 删除文件。
            ossClient.deleteObject(bucketName, objectName);
    
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    
        /**
         * Description: 判断OSS服务文件上传时文件的contentType
         *
         * @param FilenameExtension 文件后缀
         * @return String
         */
        public static String getcontentType(String FilenameExtension) {
            if (FilenameExtension.equalsIgnoreCase(".bmp")) {
                return "image/bmp";
            }
            if (FilenameExtension.equalsIgnoreCase(".gif")) {
                return "image/gif";
            }
            if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
                    FilenameExtension.equalsIgnoreCase(".jpg") ||
                    FilenameExtension.equalsIgnoreCase(".png")) {
                return "image/jpg";
            }
            if (FilenameExtension.equalsIgnoreCase(".html")) {
                return "text/html";
            }
            if (FilenameExtension.equalsIgnoreCase(".txt")) {
                return "text/plain";
            }
            if (FilenameExtension.equalsIgnoreCase(".vsd")) {
                return "application/vnd.visio";
            }
            if (FilenameExtension.equalsIgnoreCase(".pptx") ||
                    FilenameExtension.equalsIgnoreCase(".ppt")) {
                return "application/vnd.ms-powerpoint";
            }
            if (FilenameExtension.equalsIgnoreCase(".docx") ||
                    FilenameExtension.equalsIgnoreCase(".doc")) {
                return "application/msword";
            }
            if (FilenameExtension.equalsIgnoreCase(".xml")) {
                return "text/xml";
            }
            return "image/jpg";
        }
    }
    

    AliOssController

    package com.xiaoge.system.controller;
    
    import com.xiaoge.response.Result;
    import com.xiaoge.system.service.AliOssService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * @author NieChangan
     */
    @Api
    @RestController
    @CrossOrigin
    public class AliOssController {
        @Autowired
        private AliOssService aliOssService;
    
        @ApiOperation(value = "上传图片文件")
        @PostMapping("/uploadImgFile")
        public Result uploadImgFile(MultipartFile file){
            String s = aliOssService.upload(file);
            return Result.ok().data("url",s);
        }
    
        @ApiOperation(value = "删除上传替换之后的头像")
        @PostMapping("/deleteImgFile")
        public Result deleteImgFile(String file){
            //https://xinguan-parent.oss-cn-hangzhou.aliyuncs.com/2020/09/25/1575345b2cd14c13872f9b83a0aac919.png
            try {
                String[] splitFile = file.split(".com/");
                aliOssService.deleteFile(splitFile[1]);
                return Result.ok();
            }catch (Exception e){
                return Result.error();
            }
        }
    }
    

    前端代码操作

    1601008423066

    1601008572021

    发送请求的代码

    export const deleteImgFile= (file) => {
      return request({
        url: "/deleteImgFile",
        method: 'post',
        params: {
          file
        }
      })
    }
    

    添加用户全部代码

    <template>
      <div>
        <el-dialog v-bind="$attrs" v-on="$listeners" :visible.sync="showDialog" @open="onOpen" @close="onClose" title="添加用户">
          <el-row :gutter="15">
            <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="80px">
              <el-col :span="24">
                <!-- 用户头像 -->
                <el-form-item label="用户头像">
    
                  <!-- 头衔缩略图 -->
                  <pan-thumb :image="image"/>
                  <!-- 文件上传按钮 -->
                  <el-button type="primary" icon="el-icon-upload" @click="imagecropperShow=true">更换头像
                  </el-button>
    
                  <!--
                    v-show:是否显示上传组件
                    :key:类似于id,如果一个页面多个图片上传控件,可以做区分
                    :url:后台上传的url地址
                    @close:关闭上传组件
                    @crop-upload-success:上传成功后的回调 -->
                  <image-cropper
                    v-show="imagecropperShow"
                    :width="300"
                    :height="300"
                    :key="imagecropperKey"
                    :url="'/uploadImgFile'"
                    field="file"
                    @close="closeImage"
                    @crop-upload-success="cropSuccess"/>
    
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="用户名" prop="username">
                  <el-input v-model="formData.username" placeholder="请输入用户名" clearable :style="{width: '100%'}">
                  </el-input>
                </el-form-item>
                <el-form-item label="昵称" prop="nickname">
                  <el-input v-model="formData.nickname" placeholder="请输入昵称" clearable :style="{width: '100%'}">
                  </el-input>
                </el-form-item>
                <el-form-item label="密码" prop="password">
                  <el-input v-model="formData.password" placeholder="请输入密码" clearable :style="{width: '100%'}">
                  </el-input>
                </el-form-item>
                <el-form-item label="手机" prop="phoneNumber">
                  <el-input v-model="formData.phoneNumber" placeholder="请输入手机" clearable :style="{width: '100%'}">
                  </el-input>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="部门" prop="departmentId">
                  <el-select v-model="formData.departmentId" placeholder="请选择部门" clearable
                             :style="{width: '100%'}">
                    <el-option v-for="(item, index) in departments" :key="index" :label="item.name"
                               :value="item.id" :disabled="item.disabled"></el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="性别" prop="sex">
                  <el-radio-group v-model="formData.sex" size="medium">
                    <el-radio v-for="(item, index) in sexOptions" :key="index" :label="item.value"
                              :disabled="item.disabled">{{item.label}}</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-form-item label="邮箱" prop="email">
                  <el-input v-model="formData.email" placeholder="请输入邮箱" clearable :style="{width: '100%'}">
                  </el-input>
                </el-form-item>
                <el-form-item label="生日" prop="birth">
                  <el-date-picker v-model="formData.birth" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
                                  :style="{width: '100%'}" placeholder="请选择生日" clearable></el-date-picker>
                </el-form-item>
              </el-col>
            </el-form>
          </el-row>
          <div slot="footer">
            <el-button @click="close">取消</el-button>
            <el-button type="primary" @click="handelConfirm">确定</el-button>
          </div>
        </el-dialog>
      </div>
    </template>
    <script>
      import ImageCropper from '../../components/ImageCropper'
      import PanThumb from '../../components/PanThumb'
      import { deleteImgFile } from '../../api/users'
    
      export default {
        name: 'UserAdd',
        components: {ImageCropper, PanThumb},
        // 接受父组件传递的值
        props:{
          addOrUpdateVisible:{
            type: Boolean,
            default: false
          },
          departments:{
            type: Array,
            default: []
          }
        },
        data() {
          return {
            formData: {
              field101: null,
              username: undefined,
              departmentId: undefined,
              nickname: undefined,
              sex: 1,
              password: undefined,
              email: undefined,
              phoneNumber: undefined,
              birth: "2020-09-09",
            },
            // 控制弹出框显示隐藏
            showDialog:false,
            imagecropperShow: false, // 是否显示上传组件
            imagecropperKey: 0, // 上传组件id
            image: 'https://wpimg.wallstcn.com/577965b9-bb9e-4e02-9f0c-095b41417191',
            rules: {
              username: [{
                required: true,
                message: '请输入用户名',
                trigger: 'blur'
              }],
              departmentId: [{
                required: true,
                message: '请选择部门',
                trigger: 'change'
              }],
              nickname: [{
                required: true,
                message: '请输入昵称',
                trigger: 'blur'
              }],
              sex: [{
                required: true,
                message: '性别不能为空',
                trigger: 'change'
              }],
              password: [{
                required: true,
                message: '请输入密码',
                trigger: 'blur'
              }],
              email: [{
                required: true,
                message: '请输入邮箱',
                trigger: 'blur'
              }],
              phoneNumber: [{
                required: true,
                message: '请输入手机',
                trigger: 'blur'
              }],
              birth: [{
                required: true,
                message: '请选择生日',
                trigger: 'change'
              }],
            },
            sexOptions: [{
              "label": "帅哥",
              "value": 1
            }, {
              "label": "美女",
              "value": 2
            }],
          }
        },
        computed: {},
        watch: {
          // 监听 addOrUpdateVisible 改变
          addOrUpdateVisible(oldVal,newVal){
            this.showDialog = this.addOrUpdateVisible
          },
        },
        created() {},
        mounted() {},
        methods: {
          onOpen() {
    
          },
          onClose() {
            this.$refs['elForm'].resetFields()
            this.$emit('changeShow', 'false')
          },
          close() {
            this.$emit('changeShow', 'false')
          },
          handelConfirm() {
            this.$refs['elForm'].validate(valid => {
              if (!valid) return
              console.log(this.formData)
            })
          },
          field101BeforeUpload(file) {
            let isRightSize = file.size / 1024 / 1024 < 2
            if (!isRightSize) {
              this.$message.error('文件大小超过 2MB')
            }
            let isAccept = new RegExp('image/*').test(file.type)
            if (!isAccept) {
              this.$message.error('应该选择image/*类型的文件')
            }
            return isRightSize && isAccept
          },
          // 上传成功后的回调函数
          cropSuccess(data) {
            console.log(data)
            var oldImage = this.image;
            this.imagecropperShow = false
            this.image = data.data.url;
            // 上传成功后,重新打开上传组件时初始化组件,否则显示上一次的上传结果
            this.imagecropperKey = this.imagecropperKey + 1
            //上传成功之后删除之前的头像
            this.deleteAvatar(oldImage);
          },
          // 关闭上传组件
          closeImage() {
            this.imagecropperShow = false
            // 上传失败后,重新打开上传组件时初始化组件,否则显示上一次的上传结果
            this.imagecropperKey = this.imagecropperKey + 1
          },
          //删除上传之前的图片
          async deleteAvatar(oldImage){
            const {data} = await deleteImgFile(oldImage)
          }
        }
      }
    
    </script>
    <style>
      .el-upload__tip {
        line-height: 1.2;
      }
    </style>
    
    展开全文
  • 目前市面上很多图床基本上都长久不了,这样就迫使自己需要有一个可以掌控的图床储存,社长给大家分享一个基于对象存储 OSS 的的免费图片,uniCloud 提供免费 100G 云存储空间,目前新注册的好像只有 10G 了,不过也...
  • OSS对象存储是什么?

    千次阅读 2022-01-25 10:51:10
    OSS对象存储为企业用户提供一种安全稳定、低成本、高可用的非结构化数据存储服务;解决用户数据管理问题;具有无上限、弹性扩展、多类型等特点。 1.稳定可靠 对象存储作为快快云核心服务之一,具有多重冗余架构...

    对象存储OSS是在云上提供无层次结构的分布式存储产品,为用户提供单价较低且快速可靠的数据存储方案。用户可通过云服务器实例或互联网使用 Web API 接口存储和检索数据。在 OSS 上的数据,用户使用指定域名的 URL 地址,通过 HTTP/HTTPS 协议存储和检索每个独立的数据对象。

    OSS对象存储为企业用户提供一种安全稳定、低成本、高可用的非结构化数据存储服务;解决用户数据管理问题;具有无上限、弹性扩展、多类型等特点。

    1.稳定可靠

    对象存储作为快快云核心服务之一,具有多重冗余架构设计;且基于高可用架构设计,消除单节点故障,跨数据中心的副本冗余,能够保障服务的高可用性,确保数据业务的持续性

    2.安全合规

    支持服务端加密、客户端加密、防盗链、IP黑白名单、细粒度权限管控、日志审计、WORM特性,并获得多项合规认证,满足企业数据安全与合规要求

    3.智能存储

    存储空间无上限,无需担心扩容问题,能够实现存储需求的弹性伸缩;并且提供多种数据处理能力,无缝对接快快云服务器等产品,从而提高业务灵活性

    4.低成本

    无需传统硬件的采购、部署和运维,从而节省了运维工作和托管成本,有效避免存储及带宽资源的闲置浪费,降低企业的数据管理与存储成本

    网站/应用动静分离

    可以像文件夹一样管理网站上的图片,脚本,视频等静态资源,通过BGP网络或者CDN加速的方式,提供用户就近访问,有效降低云服务器负载,提升用户体验

    优势

    高性能、不必担心业务数据量增高导致的服务器负载问题

    低成本、资源弹性伸缩,按需计费

    推荐配置

    展开全文
  • 阿里云OSS对象存储

    2022-04-14 21:35:45
    阿里云OSS对象存储

    官方定义:

    阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久层,99.995%的数据可用性。多种存储类型供选择,群面优化存储成本。
    

    导入相关依赖:

    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.10.2</version>
    </dependency>
    

    配置类:

    @Data
    @ConfigurationProperties(prefix="tanhua.oss")
    public class OssProperties{
        private String accessKey;
        private String secret;
        private String bucketName;
        private String url; //路径
        private String endpoint;
    }
    

    模板类:

    package com.tanhua.autoconfig.template;
    
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.tanhua.autoconfig.properties.OssProperties;
    
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.UUID;
    
    /**
     * @Author zzw2000
     * @Date 2022年04月13日 22:56
     * @Description OSS模板类
     */
     public class OssTemplate{
         private OssProperties properties;
         public OssTemplate(OssProperties properties){
             this.properties=properties;     
         } 
         
        /**
         * 文件上传到服务器
         *
         * @param filename 文件名
         * @param inputStream 文件输入流
         * @return 文件路径
         */
         public String upload(String filename, InputStream inputStream){
            //拼写图片路径
            filename = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
                    + "/" + UUID.randomUUID()
                    + filename.substring(filename.lastIndexOf("."));
            // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
            String endpoint = properties.getEndpoint();
            // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = properties.getAccessKey();
            String accessKeySecret = properties.getSecret();
            
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            
            ossClient.putObject(properties.getBucketName(), filename, inputStream);
            //关闭ossClient
            ossClient.shutdown();
            return properties.getUrl() + "/" + filename;   
         }
     }
    

    注册到Spring IoC容器中:

    package com.tanhua.autoconfig;
    
    import com.tanhua.autoconfig.properties.OssProperties;
    import com.tanhua.autoconfig.template.OssTemplate;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    
    /**
     * @Author zzw2000
     * @Date 2022年04月10日 23:12
     * @Description 自动装配类
     */
    @EnableConfigurationProperties({classes=OssTemplate.class})
    public class TanhuaAutoConfiguration{
        @Bean
        public OssTemplate ossTemplate(OssProperties properties){
            return new OssProperties(properties);    
        }
    }
    

    在application.yml中添加OSS配置:

    oss:
      accessKey: LTAI4GKgob9vZ53k2SZdyAC7
      secret: LHLBvXmILRoyw0niRSBuXBZewQ30la
      endpoint: oss-cn-beijing.aliyuncs.com
      bucketName: tanhua001
      url: https://tanhua001.oss-cn-beijing.aliyuncs.com/
    
    展开全文
  • 阿里OSS对象存储服务

    2022-06-13 11:45:44
    阿里OSS对象存储服务
  • OSS对象存储步骤

    2021-12-10 09:59:36
    OSS对象存储步骤 1. 引入 OSS对象存储start com.alibaba.cloud spring-cloud-starter-alicloud-oss 2. yml 配置 access-,secret-key,endpoint等相关信息 spring: cloud: alicloud: access-key: LTAI5t9ZJLK9...
  • oss 对象存储说明

    千次阅读 2022-04-09 10:35:46
    oss 对象存储说明
  • 这里写自定义目录标题首先阿里云开通Oss对象存储创建bucket 首先阿里云开通Oss对象存储 开发期间选用低频访问即可,默认按量计费。 创建bucket 为自己的项目创建一个bucket 生成RAW子用户,为子用户添加读写权限 将...
  • 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。OSS具有与...
  • 创建阿里云OSS对象存储服务 创建bucket存储空间 创建RAM子用户Accesskey进行API调用(安全性考虑) 添加权限: 代码有关操作 引入阿里云oss依赖 <!-- 使用阿里云的oss对象存储服务--> <...
  • 整合OSS对象存储 一、缘起 文件上传在系统中用的很频繁,所以我们需要将上传的文件进行存储,传统的将文件上传到本机已不适用分布式系统。自己搭建文件服务器有复杂性和维护成本。所以我们可以采用市面上成熟的...
  • 七牛云OSS对象存储上传文件
  • 前端发送请求——>后端(oss),后端连接云ossoss返回路径给后端,后端再返回给前端; 前端携带图片路径和其他表单的内容,点击提交表单后,向后端再次发送请求。
  • 基于阿里云OSS对象存储的智能图床编写 由于现在云储存的发展,许多东西储存到云端更加方便,比如:图片;网上最多的工具就是七牛云以及上传利用工具,但是七牛云需要手持身份证实名认证,所以放弃;其次没有关注腾讯...
  • OSS是一种分布式文件存储的一个不错选择,对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。 申请阿里OSS,创建Bucket oss是收费的,每个...
  • 实现阿里OSS对象存储

    2018-07-11 14:11:28
    实现阿里云OSS对象存储完整代码全网唯一;具体里面有说明文件,说明文件中还说明了其它技术;
  • 作为一种新型的存储类型,对象存储有哪些优势呢,为什么要选择对象存储?这可能是很多企业关心的话题。要揭开这个迷题,或许要详细讲讲对象存储的几个优势: 1.高可靠:纠删码存储方案,能够提供更好的可靠性。跨...
  • 阿里云oss对象存储的使用
  • PHP一键上传图片到阿里云OSS对象存储,自己编写的代码,有一些注释。已在本地测试,运行成功。注意:1.有阿里云的对象存储;2.要获取AccessKey及找准Endpoint,修改代码中相应的部分;3.点击即上传,只支持图片格式...
  • 对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。 参考文档 阿里云官方API...
  • oss对象存储

    2021-11-12 20:56:00
    1.阿里云开通oss对象存储,并考同一个子账号,记下,1.access-key 2.secret-key 2.工程pom.xml引入依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-...
  • Java代码操作阿里云oss 上传文件到aliyun oss操作 1.准备工作:创建阿里云oss许可证(阿里云颁发id和密钥) 查看文档 快速入门–在项目中直接整合 在java中应用 1.创建子模块service-oss–maven项目 2.在pom...
  • 阿里云对象OSS存储服务
  • demo-oss是一个阿里云OSS对象存储的示例程序 OSS SDK下载 OSS SDK源码 OSS Maven依赖 <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss <version>2.8.1 OSS官方文档 申请及配置OSS流程 登录aliyun后...
  • 阿里云OSS对象存储Bucket 劫持漏洞复现
  • 阿里云OSS对象存储2. SDK和官方文档3. endpoint,accessKeyId ,accessKeySecret4. 创建bucket5. 上传文件6. 下载文件7. 删除文件8. 设置文件访问权限ACL9. 关于文件名中的斜杠(/)和目录说明10. 最后,最重要的一点 1...
  • #!/usr/bin/python # -*- coding: utf-8 -*- # @Version : 1.0 # @Author : QQ736592720 ...# @File : 简答题403___阿里云AI_OSS对象存储.py import oss2 #学习路径 #https://help.aliyun.com/learn/learningpath/oss.h

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,646
精华内容 9,058
关键字:

oss对象存储

友情链接: Decaf.zip