青云QingCloud 推出 QingStor™ 对象存储本地盘 for Linux

QingStor™ 对象存储本地盘 for Linux( 又名 qsfs )是 Linux 平台上访问 QingStor™ 对象存储的挂载工具。 通过 qsfs 您可以将 QingStor™ Bucket 挂载到本地文件系统中,您可以便捷地通过本地文件系统操作 QingStor™ Bucket 中的对象,实现数据的共享。

产品功能

  • 支持 POSIX 文件系统大部分功能,包括文件和目录的读写,软链接操作等。
  • 通过 QingStor™ 对象存储的 multipart 和 byte-range get 功能并行的上传和下载大文件。
  • MD5 校验保证上传数据的完整性。

主要特性

  • 高可靠、高可用,依托 QingStor™ 对象存储,提供高可靠、高可用的在线文件存储。
  • 无限水平扩展,可承载无限存储空间,存储空间的容量可无限扩展。
  • 简单易用,可直接通过本地目录的操作方式对 QingStor™ 对象存储中的文件、文件夹进行增加、删除、修改、查看等操作。
  • 开机自动挂载,开机时可自动启动并挂载到相应的 QingStor™ 对象存储存储空间 (Bucket) 中。

支持平台

为提供更好的兼容性, qsfs 基于 boost 1.49.0 进行开发,可支持较低版本编译器 ( GCC 4.1.2 以上 ) 和较老的操作系统平台。支持如下的主流的 Linux 发行版:

  • CentOS 5.8 及以上的 32 位和 64 位平台
  • Ubuntu 12.04 及以上的 32 位和 64 位平台

典型应用场景

  • 数据迁移或备份
    在对象存储实际数据迁移过程中,QingStor™ 对象存储为企业开发者提供了 qscamel、qsctl、SDK 等丰富的开发工具支持,但在实际数据迁移的场景中,有些场景不支持二次开发或者不支持命令行工具,通过 QingStor™ 对象存储本地盘,操作挂载的目录即可直接访问 QingStor™ 对象存储,方便进行数据的迁移、文件批量上传或下载。
  • 应用系统无缝对接对象存储
    在企业应用系统和对象存储的对接过程中,为了解决应用系统对接对象存储,往往需要修改应用程序代码。但如果不便于修改应用系统程序,使用 QingStor™ 对象存储本地盘,即可实现和 QingStor™ 对象存储无缝对接,应用系统即刻拥有海量的数据存储空间。

  • 个人用户磁盘扩容
    个人用户的电脑磁盘容量普遍比较有限,通过 QingStor™ 对象存储本地盘将QingStor™ 对象存储的存储空间挂载为本地目录后,可水平无限扩展本地磁盘容量。

使用指南

https://docs.qingcloud.com/qingstor/developer_tools/qsfs

青云QingCloud 推出 QingStor™ 对象存储本地盘 for Windows

QingStor™ 对象存储本地盘 for Windows(又名 ElasticDrive)是 Windows 平台上访问QingStor™ 对象存储的一种客户端软件,由 QingStor 为其提供无限容量的在线文件存储空间,而不占用本地磁盘空间。 通过 ElasticDrive 您可以像操作本地磁盘(例如C盘、D盘等)一样方便、快捷地访问或存取 QingStor™ Bucket 中的各种类型文件,其运行后如下图(其中F盘对应着 QingStor™ 的某个 Bucket)所示:

产品功能

  • 运用与 Windows 操作系统无缝链接的虚拟磁盘技术,将 QingStor™ 对象存储中的某个 Bucket 挂载为本地磁盘的一个分区。
  • 通过操作本地磁盘的方式对 QingStor™ 对象存储中的文件进行增加、删除、修改、查看、复制、粘贴等操作,并将操作结果即时同步到 Bucket 中。

支持的平台

  • Windows 7、Windows 8.1、Windows 10 的 32/64 位平台。
  • Windows Server 2008 R2、Windows Server 2012 R2、Windows Server 2016 等三种服务器平台。

主要特性

  • 高可靠、高可用,依托 QingStor™ 对象存储,提供高可靠、高可用的在线文件存储。
  • 无限水平扩展,可承载无限存储空间,存储空间的容量可无限扩展。
  • 简单易用,可直接通过本地磁盘的操作方式对 QingStor™ 对象存储中的文件、文件夹进行增加、删除、修改、查看等操作。
  • 开机启动,开机时可自动启动并挂载到相应的 QingStor™ 对象存储存储空间 (Bucket) 中。

应用场景

  • 数据迁移或备份,QingStor™ 对象存储为企业开发者提供了 qscamel、qsctl、SDK 等丰富的开发工具支持,但在实际数据迁移的场景中,有些场景不支持二次开发或者不支持命令行工具,就需要一种不用做二次开发或者输入命令行工具的方式,通过 QingStor™ 对象存储本地盘将 QingStor™ 对象存储的存储空间挂载为服务器平台下的磁盘后,再通过挂载的磁盘直接访问 QingStor™ 对象存储,进行数据的迁移、文件批量上传或下载。例如,在 Windows 服务器运行 FTP 服务器,这种场景下比较适合部署 QingStor™ 对象存储本地盘 for Windows(ElasticDrive),FTP 服务器接收到用户数据,将数据同步到 QingStor™ 对象存储,完成数据的同步。
  • 应用系统无缝对接对象存储,企业为了解决应用系统对接对象存储,往往需要修改应用程序代码,把对文件系统的读写改成调用对象存储 SDK。但如果不便于修改应用系统程序,依然想要使用对象存储作为存储后端,可以使用 QingStor™ 对象存储本地盘,实现和 QingStor™ 对象存储无缝对接,使应用系统即刻拥有海量的数据存储空间。
  • 个人用户磁盘扩容,个人用户的电脑磁盘容量普遍比较有限,通过 QingStor™ 对象存储本地盘将 QingStor™ 对象存储的存储空间挂载为本地磁盘或文件系统后,可以扩展用户个人电脑的本地磁盘容量,相当于增加一个可水平无限扩展的磁盘,作为一个类似于网盘的方式进行使用。

使用指南:https://docs.qingcloud.com/qingstor/developer_tools/elastic_drive

QingStor 对象存储新增 C/C++ SDK

截止目前, QingStorTM 对象存储官方已经发布了包括 Go、Ruby、Swift、Java、JavaScript、PHP、Python、Scala  和 .NET  九种 SDK。为了向 C/C++ 开发者提供更好的支持,QingStorTM 对象存储于近日正式发布 C/C++ SDK。

C/C++ SDK 通过开源的 QingStorTM  对象存储的 API Specifications(OpenAPI 格式,亦称 Swagger 2.0 )及 SDK 生成工具 Snips 来生成相应的 SDK 接口和公共基础部分,在 Snips 的帮助下使其能够在短时间内开发出符合生产环境使用的 SDK 。同时大大降低 SDK 的维护成本,保证各语言版本的 SDK 与最新的官方 API 保持一致。C/C++ SDK 同时提供了标准 C 和 C++ 两套接口,接口内部逻辑用 C++ 统一实现,为了提供更好的兼容性,未使用 C++ 11 特性,能够支持较低版本的编译器和较老的平台运行时环境。

下文为简要使用文档,更多详细信息请参见 https://github.com/yunify/qingstor-sdk-cpp 及  https://docs.qingcloud.com/qingstor/sdk/cpp

1. 安装

本 SDK 目前仅支持源码编译安装方式:

  • 安装需要的依赖

Windows 平台:

需要 Visual Studio 2013 或更高版本

自行下载或编译安装 curl(libcurl.lib)
和 openssl(libeay32.lib 和 ssleay32.lib)
相关的第三方库,并手动关联到 Visual Studio 解决方案中.

Linux 平台:

需要 GCC 编译器 4.1.2 或更高版本

安装 SDK 依赖的第三方库的: libcurl 和 libopenssl 。

在 Debian/Ubuntu 系列系统请使用以下命令安装

> sudo apt-get install libcurl4-openssl-dev libssl-dev

在 Redhat/Fedora 系列系统请使用以下命令安装

> sudo yum install libcurl-devel openssl-devel
  • 下载源代码
> git clone https://github.com/yunify/qingstor-sdk-cpp.git
  • 编译步骤

1.安装 CMake 工具

2.建立 build 目录:

> cd BUILD_DIR > cmake <path-to-root-of-this-source-code>

执行以下命令以编译 Release 版本:

> cmake -DCMAKE_BUILD_TYPE=Release  <path-to-root-of-this-source-code> 
> make 
> sudo make install
  • 编译标准C接口

SDK 默认编译不生成标准 C 接口,如果你希望编译包含标准 C 接口的 SDK ,请执行以下命令:

> cmake -DBUILD_C_STYLE_INTERFACE=ON  <path-to-root-of-this-source-code>

本SDK提供了 C 和 C++ 两套接口,这两套接口在使用上方式上有所差别,请您阅读相应的使用说明文档,了解具体细节。

2. 快速开始

我们分别为使用标准 C 接口和 C++ 接口提供了两个示例项目,实例项目展示了如何使用 SDK 的几个常用 API 接口,同时展示了如何使用CMake工具构建此项目的过程。
访问地址为:
更多的使用API的细节,请参考以下文档:

青云QingCloud 推出融合PCDN

PCDN是以CDN技术、P2P技术和P2P节点资源为基础,利用边缘网络的海量碎片化闲置资源而构建的低成本、高品质内容分发网络服务。通过集成PCDN SDK,能获得等同或高于CDN的分发质量,同时显著降低分发成本,适用于视频点播、直播、大文件下载等业务场景。

产品功能

  • 融合的加速技术

通过创新的P2P分发方式,数据在边缘节点进行快速共享,可提高数据流转率,并节约大量的带宽成本。整合传统CDN与P2P加速技术,双重网络边缘加速,并选择最优路径进行分发,保证无缝的流量传输体验。

  • 灵活的SDK策略

SDK下载和免SDK下载

  • 海量的节点覆盖

百万量级服务节点覆盖全国各区域,带宽储备达到10Tbps量级,拥有主流运营商的独立专线。

  • 广泛的平台支持

支持Android / iOS / OTT / Flash / HTML5等系统平台,点播支持 mp4 / flv / HLS / ts / MPEG-DASH 等文件类型;直播支持 rtmp / http-flv / HLS / udp / rtsp / MPEG-DASH 等协议,支持拉流和推流。

  • 创新的优化技术

将分发节点按照地理位置和运营商维度分组,组内成员构成网络,将流量分发局部化,减少跨运营商的网络流量。通过优化的UDP协议,实现UDP协议的可靠性传输,提高了弱网环境下传输稳定性及传输效率。

  • 精准的智能调度

准确识别访问用户的IP地址,地理位置,网络运营商归属,即时筛选出距离最近,路径最优的边缘节点进行分发。监测到终端加速效果变差或状态异常时,链路实时切换到更优的服务节,保障用户体验。

  • 多重安全保障

融合传统CDN的保护机制,提供防盗链、防DDoS攻击、黑白名单等安全措施。分发节点的数据采用分片缓存和高强度加密,防止内容被篡改。采用Token防盗链双重校验机制对URL请求中的时间戳和鉴权字符串进行双重校验,符合条件的客户端才能接入服务。

  • 全方位服务监控

管理控制台实现自主化加速配置,提供下载质量分析、下载行为分析等全透明化实时数据监控,便于掌握在线用户下载内容的行为和趋势,为用户大数据分析提供丰富的数据支撑。

应用场景

场景一:音视频点播

QingCloud提供音视频上传、编转码、媒体资源管理、分发加速一体化的视频点播解决方案,帮助快速搭建稳定、流畅、弹性的音视频点播平台,助力用户在获得高质量点播服务的同时有效降低带宽成本。QingCloud PCDN成本只有纯CDN方案的50%,在流畅率、首播时间和播放成功率性优于纯CDN方案,支持长视频点播,热度较为集中的短视频,例如; 视频门户网站、网络电视台、在线教育网站、游戏视频网站、动漫视频网站、OTT TV 客户等。配合QingStorTM对象存储音视频编转码服务,还可以进行音视频转码、转格式、压缩等数据处理服务。

推荐方案:PCDN+ QingStorTM 对象存储+音视频编转码

场景二:互动直播

QingCloud PCDN提供直播加速服务,支持对时延要求高的互动直播场景,如:互动直播、电视台直播、赛事直播等场景。在与纯CDN相当的延迟下,PCDN提供高分享率的 P2P 直播,助力客户提供优质的交互直播体验。支持的文件格式如:flv、ts、hls、rtmp等,支持多分辨率,满足客户在不同设备如手机、平板、和PC等多终端播放的需求。

场景三:大文件下载

QingCloud PCDN提供大文件下载优化加速分发,支持的文件格式有apk、lz4、exe、zip 、mp4、flv、ts、hls等。QingCloud PCDN采用创新的P2P分发方式,数据在边缘节点进行快速共享,确保用户获得更快的下载速度;利用分段缓存技术提高了大文件下载传输的稳定性。配合QingStorTM对象存储一起使用,可有效降低回源和存储成本。建议超过1MB且热度集中的文件采用PCDN分发,如应用市场分发、在线音频分发等。

推荐方案:PCDN+ QingStorTM 对象存储

产品使用地址为:https://docs.qingcloud.com/product/network/pcdn

 

 

QingStor™ 对象存储对接第三方图普科技鉴黄服务

QingStor™ 对象存储已经支持对接第三方数据处理服务,并接入了图普科技鉴黄服务。

QingStor™ 对象存储利用内部的异步数据处理框架,当有指定的对象上传成功时,会自动生成事件消息并触发各种数据处理。例如当用户开启了图普鉴黄服务,则会调用鉴黄 API 对指定的上传对象进行鉴黄识别,在识别流程结束后,识别结果将被回传,并推送到用户指定的通知地址中。

在操作层面,用户只需要在 QingStor™ 对象存储的控制界面中,一键选择开启服务并完成配置,服务即可自动开始运行。
开启图普鉴黄式例:

1. 在 console 中点击进入对象存储用户的某个具体 bucket 页面,点击 tab【数据处理】。

2. 列表中找到“图普鉴黄”,点击右侧按钮【点击开启】,在输入框“接收结果地址” 中写入用户自己的 notifiy_url ,以及“文件名匹配规则“中输入鉴黄目标的 glob patterns 。


以以上示例图的开启配置为例,每当有 jpg, jpeg, png 为后缀的对象上传成功后,将会对其进行鉴黄,并把结果推送到 http://example.notify.com 。

结果示例:

{
    "bucket": "fakebucket",
    "object": "porn.jpeg",
    "result": {
        "54bcfc6c329af61034f7c2fc": {
            "fileList": [
                {
                    "label": 2,
                    "name": "porn.jpeg",
                    "rate": 0.9836746454238892,
                    "review": false
                }
            ]
        },
        "code": 0,
        "message": "success",
        "nonce": "0.2297668219538047",
        "reviewCount": 0,
        "statistic": [
            0,
            0,
            1
        ],
        "timestamp": 1498647797834.0
    }
}

以上返回结果表示图片 “porn.jpeg”  被鉴定为正常图片的概率为 98%, 且不需要人工 review 。

参考: 图普鉴黄服务说明文档 。

QingStor 对象存储新增 Logstash Input/Output 插件

QingStor Logstash Input/Output 插件为首届 QingStor Satellites 活动中成功孵化出的项目,在 QingStor Satellites 活动中,QingStor 团队会选择一些有意义的开源项目为课题,并作为导师指导高校学生逐步完成项目。

QingStor Logstash Input/Output 插件的开发者为 Tacinight,来自兰州大学信息科学与工程学院 DSLab 研究生一年级的同学 赵益民(下图即为赵益民同学近照)。

QingStor Logstash Input/Output 插件已经通过 QingStor 官方审核,并被收纳为 QingStor 官方的 Logstash 插件,后续将由 QingStor 官方与赵益民同学一起进行维护。

下文为简要使用文档。更多详细信息请参见 https://github.com/yunify/logstash-input-qingstor 和 https://github.com/yunify/logstash-output-qingstor

Logstash 简介

Logstash 是一款轻量级的日志搜集和处理工具,可以方便的把分散的、多样化的日志收集起来,并进行自定义的处理,然后传输到指定的目标,比如输出到 Elasticsearch 或者写入文件。Logstash 整体可大致分为三部分,即数据输入(Input)、数据加工(Filter)、数据输出(Output),同时 Logstash 内置了多种输入输出插件,方便用户对接各种第三方服务。QingStor Logstash Input/Output 插件实现了对象存储服务和 Logstash 的对接,方便用户读取存储在对象存储的日志或者上传处理后的日志到对象存储。

安装

首先确保 Logstash 已正确安装,之后使用以下命令从 Ruby Gems 安装插件。

$ bin/logstash-plugin install logstash-input-qingstor
$ bin/logstash-plugin install logstash-output-qingstor

快速开始

使用插件之前请先在 青云控制台 申请 Access Key。

Input 和 Output 插件的基本配置项如下,查看更多可用选项可访问 GitHub 项目页面进行查阅。

input {
    qingstor {
        access_key_id => "your_access_key_id"
        secret_access_key => "your_secret_access_key"
        bucket => "input_bucket_name"
        region => "pek3a"
    }
}
output {
    qingstor {
        access_key_id => "your_access_key_id"
        secret_access_key => "your_secret_access_key"
        bucket => "output_bucket_name"
        region => "pek3a"
    }
}
设置完成之后启动 Logstash,即可从对象存储读取日志文件,然后按照固定大小或固定时间切分并归档,最后输出处理后的日志文件到对象存储。
$ ./bin/logstash -f qs_input_ouput.conf

致谢

最后对 QingStor Logstash Input/Output 插件的作者 Tacinight (赵益民同学) 表示感谢,同时我们也欢迎更多高校学生或第三方开发者参与到我们的开源项目中来。

QingStor 对象存储新增 .NET SDK

QingStor 对象存储到目前为止已经发布了包括 Go、Ruby、Swift、Java、JavaScript、PHP、Python、Scala 等八种语言的 SDK,为了方便 .NET 平台的用户使用 QingStor 对象存储服务,现特新增 .NET SDK。

QingStor .NET SDK 通过开源的 QingStor 对象存储的 API Specifications(OpenAPI 格式,亦称 Swagger 2.0 格式)及 SDK 生成工具 Snips 来生成相应的SDK接口和公共基础部分,在 Snips 的帮助下使其能够在短时间内开发出符合生产环境使用的SDK。

下文为简要使用文档,更多详细信息请参见 https://github.com/yunify/qingstor-sdk-net

1. 安装

可通过以下三种安装方式任意一种安装。

  • 直接下载源码并将其添加至项目:
$ git clone https://github.com/yunify/qingstor-sdk-net.git
  • 直接添加 DLL 引用:
在 GitHub 的 Release 页面 下载相应版本的 DLL,然后将其添加至项目引用。由于此 SDK 
依赖于 Json.NET,可以添加该 SDK 对应版本的 Newtonsoft.Json.dll 引用或者使用 
NuGet来安装它:
Install-Package Newtonsoft.Json
  • 通过包管理器(NuGet)安装:
例如在 Visual Studio 2013 中,打开 NuGet 程序包管理器搜索 QingStor_SDK_NET 
或者在控制台中键入以下命令(其中,QingStor_SDK_NET45 表示 .NET Framework 4.5 
平台下的SDK):
Install-Package QingStor_SDK_NET45

2. 初始化服务

发起请求前首先建立初始化服务:

using QingStor_SDK_NET.Common;
using QingStor_SDK_NET.Service;

CConfig Config = new CConfig("Config.yaml");
CQingStor Service = new CQingStor(Config);

上面代码初始化了一个 QingStor Service。

3. 获取账户下的 Bucket 列表

CListBucketsOutput ListBuckets = Service.ListBuckets(null);

// Print the HTTP status code.
// Example: 200
Console.Write(ListBuckets.StatusCode);

// Print the bucket count.
// Example: 5
Console.Write(ListBuckets.count);

4. 创建 Bucket

初始化并创建 Bucket, 需要指定 Bucket 名称和所在 Zone

CBucket Bucket = Service.Bucket("bucket-name", "pek3a");
CPutBucketOutput PutBucketOutput = Bucket.Put();

5. 获取 Bucket 中存储的 Object 列表

CListObjectsOutput ListObjectsOutput = Bucket.ListObjects(null);

// Print the HTTP status code.
// Example: 200
Console.Write(ListObjectsOutput.StatusCode);

// Print the key count.
// Example: 0
Console.Write(ListObjectsOutput.keys.Length);

6. 创建一个 Object

CPutObjectInput PutObjectInput = new CPutObjectInput();
PutObjInput.Body = new FileStream("/tmp/Screenshot.jpg", FileMode.Open);
CPutObjectOutput PutObjectOutput = Bucket.PutObject("Screenshot.jpg", PutObjectInput);

// Print the HTTP status code.
// Example: 201
Console.Write(PutObjectOutput.StatusCode);

7. 删除一个 Object

CDeleteObjectOutput DeleteObjectOutput = BucketObj.DeleteObject("Screenshot.jpg");

// Print the HTTP status code.
// Example: 204
Console.Write(DeleteObjectOutput.StatusCode);

8. 设置 Bucket ACL

CGranteeType Grantee = new CGranteeType() { id = "usr-id", type = "user" };
CACLType ACL = new CACLType() { grantee = Grantee, permission = "FULL_CONTROL" };
CPutBucketACLInput PutBucketACLInput = new CPutBucketACLInput();
PutBucketACLInput.acl = new CACLType[] { ACL };
CPutBucketACLOutput PutBucketACLOutput = Bucket.PutACL(PutBucketACLInput);

// Print the HTTP status code.
// Example: 200
Console.Write(PutBucketACLOutput.StatusCode);

QingStor 对象存储新增 Scala SDK

QingStor Scala SDK 为首届 QingStor Satellites 活动中成功孵化出的项目,在 QingStor Satellites 活动中,QingStor 团队会选择一些有意义的开源项目为课题,并作为导师指导高校学生逐步完成项目。

QingStor Scala SDK 的开发者为 Cheerx ,来自兰州大学信息科学与工程学院 DSLab 研究生一年级的同学 谢启荣 (下图即为谢启荣同学近照)。

QingStor Scala SDK 已经过 QingStor 官方审核,并被收纳为 QingStor 官方的 Scala SDK,后续将由 QingStor 官方与谢启荣同学一起进行维护。

下文为简要使用文档。更多详细信息请参见 https://github.com/yunify/qingstor-sdk-scala

安装

点击 此处 下载最新版的 Jar 包,也可访问 GitHub 项目的 Releases 页面查看和下载历史版本。

文件名中包含 fat 后缀的 Release 中包含了 SDK 所需的依赖,使用时无需手动加载其依赖包,如 qingstor-sdk-scala-v2.0.0_2.11_fat.jar。而文件名中不包含 fat 的 Release 中没有包含相关依赖,需要手动指定。

描述 SDK 所需依赖关系的 SBT 文件片段样例如下:

libraryDependencies ++= {
  val akkaHttpVersion = "10.0.5"
  val circeVersion = "0.7.1"
  Seq(
    "com.typesafe.akka" %% "akka-http-core" % akkaHttpVersion,
    "com.typesafe.akka" %% "akka-http" % akkaHttpVersion,
    "io.circe" %% "circe-generic" % circeVersion,
    "io.circe" %% "circe-parser" % circeVersion,
    "org.yaml" % "snakeyaml" % "1.17",
    "de.heikoseeberger" %% "akka-http-circe" % "1.15.0"
  )
}

快速开始

使用 SDK 之前请先在 青云控制台 申请 Access Key。

初始化服务

发起请求前首先建立需要初始化服务:

import com.qingstor.sdk.config.QSConfig
import com.qingstor.sdk.service.QingStor

val config = QSConfig("ACCESS_KEY_ID", "SECRET_ACCESS_KEY")
val qsService = QingStor(config)

初始化并创建 Bucket, 需要指定 Bucket 名称和所在 Zone:

import com.qingstor.sdk.service.Bucket

val bucket = Bucket(config, "test-bucket", "pek3a")
val outputFuture = bucket.put(Bucket.PutBucketInput())

获取 Bucket 中存储的 Object 列表

val outputFuture = bucket.listObjects(Bucket.ListObjectsInput())
val listObjectsOutput = Await.result(outputFuture, Duration.Inf)

// Print the HTTP status code.
// Example: 200
println(listObjectsOutput.statusCode.getOrElse(-1))

// Print the key count.
// Example: 7
println(listObjectsOutput.keys.map(_.length).getOrElse(-1))

创建一个 Object

例如一张图片:

// Open file
val file = new File("/tmp/test.jpg")
val input = PutObjectInput(
  // Because this SDK used akka-http as http library, it's useless to set Content-Length here
  contentLength = file.length().toInt,
  body = file
)
val outputFuture = bucket.putObject("test.jpg", input)
val putObjectOutput = Await.result(outputFuture, Duration.Inf)
file.close()

// Print the HTTP status code.
// Example: 201
println(putObjectOutput.statusCode.getOrElse(-1))

删除一个 Object

val outputFuture = bucket.deleteObject(arg, Bucket.DeleteObjectInput())

// Print the HTTP status code.
// Example: 204
println(outputFuture.statusCode.getOrElse(-1))

使用中遇到问题请在 项目 Issues 区 提交反馈。

致谢

最后对 Scala SDK 的作者 Cheerx (谢启荣同学) 表示感谢,同时我们也欢迎更多高校学生或第三方开发者参与到我们的开源项目中来。

QingStor 对象存储推出 FTP 对接工具 qsftpd

qsftpd 是一个将 QingStor 对象存储作为存储后端的 FTP Server,用户通过简单的配置,即可通过 FTP 协议使用对象存储服务。qsftpd 已在 GitHub 开源,更多详情可参见 https://github.com/yunify/qsftpd

下载安装

qsftpd 支持 Linux、macOS 和 Windows 操作系统,最新版本下载链接如下,也可访问 GitHub 项目的 Releases 页面查看和下载历史版本。

使用示例

创建配置文件,如 qsftpd.yaml,并根据需要进行配置,示例配置文件如下。

# 设置 QingStor 对象存储服务
qingstor:
  access_key_id: access_key_id_example
  secret_access_key: secret_access_key_example
  host: qingstor.com
  port: 443
  protocol: https
  log_level: warn

# 填写需要使用的 Bucket
bucket_name: bucket_name_example
zone: pek3a

# FTP Server 配置,如监听的端口号和最大连接数
listen_host: 127.0.0.1
listen_port: 21
public_host: 127.0.0.1
max_connections: 128

# 认证设置,默认允许匿名用户登录,也可以指定特定的用户登录
#users:
#  username_example: password_example

启动 FTP Server。

$ qsftpd -c path/to/your/qsftpd.yaml
[2017-04-12T03:24:40.541Z #2527]  INFO -- : Listening... 127.0.0.1:21
[2017-04-12T03:24:40.541Z #2527]  INFO -- : Starting...
[2017-04-12T03:24:49.330Z #2527]  INFO -- : FTP Client connected: ftp.connected, id: 76e209d6a89448279e947a7babe0097d, RemoteAddr: 127.0.0.1:51788, Total: 1
......

最后使用 ftp 客户端连接 FTP Server 进行测试。

$ ftp -a 127.0.0.1
Connected to 127.0.0.1.
220 Welcome to QSFTP Server
331 User name okay, need password.
230 Password ok, continue
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||6081|)
150 Using transfer connection
d--------- 1 ftp ftp            0  Nov 30 00:00  test-output

226 Closing transfer connection
ftp> put AUTHORS
local: AUTHORS remote: AUTHORS
229 Entering Extended Passive Mode (|||6887|)
150 Using transfer connection
100% |***********************************|   146       91.68 KiB/s    00:00 ETA
226 Closing transfer connection
146 bytes sent in 00:00 (2.19 KiB/s)
ftp> 

QingStor 对象存储支持设置 IP 地址黑/白名单

存储空间策略是 QingStor 对象存储 Bucket 的子资源(subresource),其语义主要由用户、 资源、动作、及条件运算符组合定义,允许用户更细粒度的控制存储空间的访问。此次更新为存储空间策略增加了控制访问 IP 的功能,用户可以设置允许或拒绝访问的 IP 地址。

配置示例

1. 在 Bucket 详情中进入设置页面,切换到 “存储空间策略” 标签页,点击 “添加规则” 按钮。

Cloud_控制台_-_zw_ZW_

2. 在 “IP 地址” 部分设置 “包含” “10.70.0.0/24”,注意这里填写的 IP 地址需为 CIDR 格式。

Cloud_控制台_-_zw_ZW_

3. 点击保存即可。

通过以上的设置,现在只允许从 10.70.0.0/24 这个 IP 地址段访问此 Bucket。如果想禁止某些 IP 地址段访问,可以添加类型为 “不包含” 的 IP 地址段,或者将规则中的 “响应动作” 设置为 “拒绝”。

更多详细介绍请参考相关文档: QingStor Bucket Policy