OSS阿里云(Object Storage Service)是一种安全、高可靠、高可扩展的云端对象存储服务。它可以通过 APIs 对象存储控制台或者 SDK 开发工具完成对云端文件的上传、下载、删除等基本操作。本文将从多个方面详细介绍OSS阿里云的特点及其适用的场景。
一、高可靠的存储
OSS可以存储任意类型的文件,包括文本、图像、音频、视频文件等。存储文件时,OSS默认采用3副本存储模式,将数据在3个不同的物理存储设备上存储,确保数据的安全性和高可靠性。同时,OSS也支持存储方式选择自定义,根据用户需求来选择其他存储方式,如副本数、单副本速度等等。
代码示例:
// 存储时采用默认的3副本存储模式 ossClient.putObject(bucketName, objectName, inputStream); // 存储时,自定义存储方式和参数 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); putObjectRequest.setStorageClass(StorageClass.IA); // 设置对象存储类型为低频访问存储 putObjectRequest.setCannedACL(CannedAccessControlList.PublicRead); // 设置对象ACL为公共读 ossClient.putObject(putObjectRequest);
二、高性能的上传下载
在OSS上上传/下载文件时,它具有高可靠性、高速度、高吞吐量的特点。OSS的上传功能支持断点续传,同时也支持服务器端复制和分片上传。OSS的下载功能支持全站加速,加速下载来自世界各地的用户请求。
代码示例:
// 文件上传 File file = new File("localFile"); ossClient.putObject(bucketName, objectName, file); // 断点续传上传 // ... ossClient.uploadPart(uploadPartRequest); // 文件下载 OSSObject ossObject = ossClient.getObject(bucketName, objectName); InputStream inputStream = ossObject.getObjectContent(); // 加速下载 GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET); request.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000L)); URL url = ossClient.generatePresignedUrl(request);
三、API多样性
OSS提供了多种API方式,包括RESTful API、Java SDK、Python SDK、Ruby SDK、PHP SDK、.NET SDK等等。多种API方式可以方便用户在不同的开发环境和开发框架中使用。用户可以根据自己的需求来选择最适合的API方式。
代码示例:
// Java SDK上传文件 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); ossClient.putObject(bucketName, objectName, new File(localFilePath)); // Python SDK下载文件 auth = oss2.Auth(access_key_id, access_key_secret) bucket = oss2.Bucket(auth, endpoint, bucket_name) with open(local_file_path, 'wb') as f: for chunk in oss2.resumable_download(bucket, object_name, progress_callback=percentage): f.write(chunk) // PHP SDK删除文件 $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->deleteObject($bucket, $object);
四、应用场景
OSS可用于媒体资产管理、智能家居、物联网、在线教育、电商等多个行业。以下是一些使用场景的简要介绍。
1. 媒体资产管理
用户可以将大量的视频、音频、图片等媒体资产存储在OSS上,并通过CDN加速进行高效分发。这里的媒体资产管理可分为在线制作和后期制作两个环节。
2. 智能家居
在智能家居数码产品中(如摄像头、门锁、智能音箱),基于OSS存储的图片和视频数据即可存储到云端,支持数据覆盖、多媒体管理等一系列操作,方便用户随时随地查看家中各种设备状态。
3. 物联网
OSS可以存储物联网设备生成的数据和文件(如传感器、集控器、网关)等,同时支持与Web端进行交互,为采集、存储和使用数据提供高效、安全的解决方案。
4. 在线教育
在线教育行业需要存储大量的视频、音频课件,作为教育资源供TA支持教学使用。OSS的高可靠性和数据访问速度使得学生、老师可以快速地获取教育资源。
5. 电商
OSS可以作为电商行业中存储商品图片、视频、文档等资源的云端存储服务。例如,用户在购物过程中可以选择图片放大查看、甚至是视频播放;商家可以通过OSS来托管大规模的商品详情页图片等资源。
总之,不同行业可以依据自身需求差异选择使用OSS进行当地存储或进行全球化部署,同时,通过OSS的多样性API,使得用户可以方便地在不同设备和场景中使用OSS。
代码示例:
// 媒体资产管理 // ... OSSObject object = ossClient.getObject(bucketName, objectName); InputStream inputStream = object.getObjectContent(); // do something with inputStream // 智能家居 // ... // OSS盘提供的摄像头获取和视频回看功能。 // 中转服务器得到摄像头推送过来的图片或视频流,存储到oss盘中。 // App端请求获取摄像头回看,中转服务器从oss盘中获取对应的图片或视频流。 // 物联网 // ... public ListquerySensorData(String productKey, String deviceName, String startTimestamp, String endTimestamp) { List deviceDataList = new ArrayList<>(); QueryDeviceDataRequest request = new QueryDeviceDataRequest(); request.setProductKey(productKey); request.setDeviceName(deviceName); request.setStartTime(startTimestamp); request.setEndTime(endTimestamp); for (DataEntry entry : client.getDeviceData(request).getData()) { DeviceData deviceData = JSONSerializer.deserialize(entry.getData(), DeviceData.class); deviceData.setTime(entry.getTime()); deviceDataList.add(deviceData); } return deviceDataList; } // 在线教育 // ... OSSObject ossObject = ossClient.getObject(bucketName, objectName); InputStream inputStream = ossObject.getObjectContent(); // 电商 // ... OSSObject ossObject = ossClient.getObject(bucketName, objectName); InputStream inputStream = ossObject.getObjectContent(); // do something with inputStream