MSS(Meituan Storage Service) SDK for Java

This is MSS SDK for Java。

Introduction

MSS服务介绍

美团云存储服务(Meituan Storage Service, 简称MSS),是美团云对外提供的云存储服务,其具备高可靠,安全,低成本等特性,并且其API兼容S3。MSS适合存放非结构化的数据,比如图片,视频,文档,备份等。

MSS基本概念介绍

MSS的API兼容S3, 其基本概念也和S3相同,主要包括Object, Bucket, Access Key, Secret Key等。

Object对应一个文件,包括数据和元数据两部分。元数据以key-value的形式构成,它包含一些默认的元数据信息,比如Content-Type, Etag等,用户也可以自定义元数据。

Bucket是object的容器,每个object都必须包含在一个bucket中。用户可以创建任意多个bucket。

Access Key和Secret Key: 用户注册MSS时,系统会给用户分配一对Access Key和Secret Key, 用于标识用户,用户在使用API使用MSS服务时,需要使用这两个Key。请在美团云管理控制台查询AccessKey和SecretKey。

MSS访问域名

mtmss.com

Installation

下载MSS SDK for Java包后,进入MSS SDK for Java目录下,运行"mvn install",即可完成MSS SDK for Java的安装。

新创建的MSS相关的maven项目,只需要在pom文件的下添加MSS SDK for Java依赖:

com.amazonaws

mss-java-sdk-s3

1.9.4

注意:目前MSS SDK支持的Java版本包括Java1.6,Java1.7和Java1.8。

Quick Start

创建AmazonS3Client

package com.meituan.mss.s3test;

import com.amazonaws.ClientConfiguration;

import com.amazonaws.Protocol;

import com.amazonaws.auth.AWSCredentials;

import com.amazonaws.auth.BasicAWSCredentials;

import com.amazonaws.services.s3.AmazonS3;

import com.amazonaws.services.s3.AmazonS3Client;

import com.amazonaws.services.s3.S3ClientOptions;

import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.util.Properties;

public class AmazonS3ClientProvider {

/**

*

* 创建AmazonS3Client

*

*

* @accessKey:mss用户的access key

* secretKey:mss用户的access secret

* url:mss server hostname,一般为mtmss.com

*/

private static String accessKey = "*** accessKey ***";

private static String secretKey = "*** secretKey ***";

private static String url = "http://mtmss.com";

static AmazonS3Client s3conn;

public static AmazonS3 CreateAmazonS3Conn()

throws IOException{

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

ClientConfiguration clientConfig = new ClientConfiguration();

//clientConfig.setSignerOverride("S3SignerType");

URL ep = new URL(url);

if (ep.getProtocol().equalsIgnoreCase("http")) {

clientConfig.setProtocol(Protocol.HTTP);

} else if (ep.getProtocol().equalsIgnoreCase("https")) {

clientConfig.setProtocol(Protocol.HTTPS);

} else {

throw new IOException("Unsupported protocol");

}

String endpoint = ep.getHost();

if (ep.getPort() > 0) {

endpoint += ":" + ep.getPort();

}

S3ClientOptions s3ClientOptions = new S3ClientOptions();

// mss only support path style access.

s3ClientOptions.setPathStyleAccess(true);

s3conn = new AmazonS3Client(credentials, clientConfig);

s3conn.setS3ClientOptions(s3ClientOptions);

s3conn.setEndpoint(endpoint);

//s3conn.setSignerRegionOverride("S3SignerType");

return s3conn;

}

}

创建Bucket

import com.amazonaws.AmazonClientException;

import com.amazonaws.AmazonServiceException;

import com.amazonaws.services.s3.AmazonS3;

import com.amazonaws.services.s3.model.AccessControlList;

import com.amazonaws.services.s3.model.Bucket;

import com.meituan.mss.s3test.AmazonS3ClientProvider;

public class CreateBucket {

private static String newBucketName = "mss-test-bucket";

private static AmazonS3 s3Client = AmazonS3ClientProvider.CreateAmazonS3Conn();

public void testCreateBucket_NewBucketNameMatches() {

try {

Bucket bucket = s3Client.createBucket(newBucketName);

} catch (AmazonServiceException ase) {

System.out.println("Caught an AmazonServiceException, which" +

" means your request made it " +

"to Amazon S3, but was rejected with an error response" +

" for some reason.");

System.out.println("Error Message: " + ase.getMessage());

System.out.println("HTTP Status Code: " + ase.getStatusCode());

System.out.println("AWS Error Code: " + ase.getErrorCode());

System.out.println("Error Type: " + ase.getErrorType());

System.out.println("Request ID: " + ase.getRequestId());

} catch (AmazonClientException ace) {

System.out.println("Caught an AmazonClientException, which means"+

" the client encountered " +

"an internal error while trying to " +

"communicate with S3, " +

"such as not being able to access the network.");

System.out.println("Error Message: " + ace.getMessage());

}

}

}

上传文件

import java.io.File;

import java.io.IOException;

import com.amazonaws.AmazonClientException;

import com.amazonaws.AmazonServiceException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;

import com.amazonaws.services.s3.AmazonS3;

import com.amazonaws.services.s3.AmazonS3Client;

import com.amazonaws.services.s3.model.PutObjectRequest;

import com.meituan.mss.s3test.AmazonS3ClientProvider;

public class UploadObjectSingleOperation {

private static String bucketName = "*** Provide bucket name ***";

private static String objectName = "*** objectName ***";

private static AmazonS3 s3Client = AmazonS3ClientProvider.CreateAmazonS3Conn();

public void testUploadObject() {

try {

System.out.println("Uploading a new object to S3 from a file\n");

File file = new File(uploadFileName);

s3client.putObject(new PutObjectRequest(

bucketName, objectName, file));

} catch (AmazonServiceException ase) {

System.out.println("Caught an AmazonServiceException, which " +

"means your request made it " +

"to Amazon S3, but was rejected with an error response" +

" for some reason.");

System.out.println("Error Message: " + ase.getMessage());

System.out.println("HTTP Status Code: " + ase.getStatusCode());

System.out.println("AWS Error Code: " + ase.getErrorCode());

System.out.println("Error Type: " + ase.getErrorType());

System.out.println("Request ID: " + ase.getRequestId());

} catch (AmazonClientException ace) {

System.out.println("Caught an AmazonClientException, which " +

"means the client encountered " +

"an internal error while trying to " +

"communicate with S3, " +

"such as not being able to access the network.");

System.out.println("Error Message: " + ace.getMessage());

}

}

}

下载文件

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import com.amazonaws.AmazonClientException;

import com.amazonaws.AmazonServiceException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;

import com.amazonaws.services.s3.AmazonS3;

import com.amazonaws.services.s3.AmazonS3Client;

import com.amazonaws.services.s3.model.GetObjectRequest;

import com.amazonaws.services.s3.model.S3Object;

import com.meituan.mss.s3test.AmazonS3ClientProvider;

public class GetObject {

private static String bucketName = "*** provide bucket name ***";

private static String objectName = "*** objectName ***";

private static AmazonS3 s3Client = AmazonS3ClientProvider.CreateAmazonS3Conn();

public void getObject() {

try {

System.out.println("Downloading an object");

S3Object s3object = s3Client.getObject(new GetObjectRequest(

bucketName, objectName));

System.out.println("Content-Type: " +

s3object.getObjectMetadata().getContentType());

InputStream objectData = s3object.getObjectContent()

} catch (AmazonServiceException ase) {

System.out.println("Caught an AmazonServiceException, which" +

" means your request made it " +

"to Amazon S3, but was rejected with an error response" +

" for some reason.");

System.out.println("Error Message: " + ase.getMessage());

System.out.println("HTTP Status Code: " + ase.getStatusCode());

System.out.println("AWS Error Code: " + ase.getErrorCode());

System.out.println("Error Type: " + ase.getErrorType());

System.out.println("Request ID: " + ase.getRequestId());

} catch (AmazonClientException ace) {

System.out.println("Caught an AmazonClientException, which means"+

" the client encountered " +

"an internal error while trying to " +

"communicate with S3, " +

"such as not being able to access the network.");

System.out.println("Error Message: " + ace.getMessage());

}

}

}

s3 presign

import com.amazonaws.AmazonClientException;

import com.amazonaws.AmazonServiceException;

import com.amazonaws.HttpMethod;

import com.amazonaws.services.s3.AmazonS3;

import com.amazonaws.services.s3.model.Bucket;

import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;

import com.amazonaws.services.s3.model.ObjectMetadata;

import com.meituan.mss.s3test.AmazonS3ClientProvider;

import com.meituan.mss.s3test.factory.TestS3ObjectFactory;

import junit.framework.Assert;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.util.Date;

import org.apache.commons.httpclient.*;

import org.apache.commons.httpclient.methods.*;

import com.amazonaws.services.s3.model.ResponseHeaderOverrides;

import java.io.*;

public class PreSignURL {

private static String bucketName = "*** provide bucket name ***";

private static String objectName = "*** objectName ***";

private static AmazonS3 s3Client = AmazonS3ClientProvider.CreateAmazonS3Conn();

public void presigntest() {

try {

System.out.println("Generating pre-signed URL.");

java.util.Date expiration = new java.util.Date();

long milliSeconds = expiration.getTime();

milliSeconds += 1000 * 60 * 5; // Add 1 hour.

expiration.setTime(milliSeconds);

//generate Get Bucket presign request

GeneratePresignedUrlRequest generatePresignedUrlRequest =

new GeneratePresignedUrlRequest(bucketName, "");

generatePresignedUrlRequest.setMethod(HttpMethod.GET);

generatePresignedUrlRequest.setExpiration(expiration);

URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);

System.out.println("Pre-Signed URL = " + url.toString());

String url_str = url.toString();

HttpClient client = new HttpClient();

GetMethod method = new GetMethod(url_str);

try {

int statusCode = client.executeMethod(method);

Assert.assertEquals(statusCode, 200);

} catch (HttpException e) {

System.err.println("Fatal protocol violation: " + e.getMessage());

e.printStackTrace();

} catch (IOException e) {

System.err.println("Fatal transport error: " + e.getMessage());

e.printStackTrace();

} finally {

// Release the connection.

method.releaseConnection();

}

} catch (AmazonServiceException exception) {

System.out.println("Caught an AmazonServiceException, " +

"which means your request made it " +

"to Amazon S3, but was rejected with an error response " +

"for some reason.");

System.out.println("Error Message: " + exception.getMessage());

System.out.println("HTTP Code: " + exception.getStatusCode());

System.out.println("AWS Error Code:" + exception.getErrorCode());

System.out.println("Error Type: " + exception.getErrorType());

System.out.println("Request ID: " + exception.getRequestId());

} catch (AmazonClientException ace) {

System.out.println("Caught an AmazonClientException, " +

"which means the client encountered " +

"an internal error while trying to communicate" +

" with S3, " +

"such as not being able to access the network.");

System.out.println("Error Message: " + ace.getMessage());

}

}

}

美团 java_GitHub - meituan/mssapi_java: 美团云对象存储 Java SDK相关推荐

  1. 电信天翼 java_电信天翼云对象存储java实现

    首先先了解电信天翼云对象存储 产品介绍您也可以通过OOS提供的SDK来调用OOS服务,开发语言目前支持Ruby..NET.PHP.Java.Python 官方的开发文档还是13年版本的,demo也是各 ...

  2. 电信天翼云对象存储java实现

    首先先了解电信天翼云对象存储 产品介绍         对象存储(Object-Oriented Storage, OOS)是中国电信为客户提供的一种海量.弹性.廉价.高可用的存储服务.客户只需花极少 ...

  3. 天翼云对象存储Java对接(经典版 Ⅱ型)

    前言: 1.此教程只针对 经典版 Ⅱ型 2.前两天甲方让用天翼云做对象存储,我一脸懵逼,根本没听过这玩意,之前就用过阿里云,和华为云,而且喵的他们的接口文档一点用都没有,后来我给他们客服打电话,他们安 ...

  4. 腾讯云 对象存储Java文件上传 学习资料整理

    # 初始化AmazonS3 前置要求: 获取密钥对:secretID:secretKey 有效Endpoint:nos-eastchina1.126.net 安装SDK --> 即Maven依赖 ...

  5. 阿里云 对象存储java实现OSS文件上传及获取URL

    本人已尝试上传成功 maven加载的jar包 pom配置 <dependency><groupId>com.aliyun.oss</groupId><arti ...

  6. 腾讯云对象存储java代码演示

    引入maven <dependency><groupId>com.qcloud</groupId><artifactId>cos_api</art ...

  7. 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客

    如何利用阿里云对象存储OSS搭建自己图床写博客 1.购买阿里云 购买链接 登录阿里云–>控制台–>对象存储OSS–购买 购买的时候可以选择按月付费一月一元的,也可以年费9元的,40GB作为 ...

  8. 阿里云对象存储OSS之通过URL形式进行图片处理

    什么是OSS 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.它具有与平台无关的RESTful API接口,能够 ...

  9. oss客户端工具_干货 | 基于Go SDK操作京东云对象存储OSS的入门指南

    前言 本文介绍如何使用Go语言对京东云对象存储OSS进行基本的操作,帮助客户快速通过Go SDK接入京东云对象存储,提高应用开发的效率. 在实际操作之前,我们先看一下京东云OSS的API接口支持范围和 ...

最新文章

  1. python保存的是什么类型文件_python-----基本的数据类型和文件操作
  2. 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
  3. Kafka设计解析(八)- Exactly Once语义与事务机制原理
  4. java基础教程哪个好,面试必会
  5. 面向对象方法的优势简化软件开发的过程_Java面试题说一说你的对面向过程和面向对象的理解...
  6. 寻找设计独特标识LOGO的灵感?可编辑模板帮你轻松解决!
  7. idea搭建java openCV环境
  8. C语言相反次序重新排序
  9. iOS开发中view controller设置问题
  10. java数组使用实验报告_Java实验报告二数组.doc
  11. Allegro学习笔记:Allegro快速入门之一--查看BRD Layout
  12. 一款黑科技神器:uTools
  13. Android苹方圆三合一字体,橘色主题-圆形图标 内置苹方+googlesans字体 透明文件夹...
  14. Apache Zeppelin安装和启动
  15. antv g6多次渲染问题解决
  16. Redis单线程和多线程
  17. 宁强天津中学2021高考成绩查询,宁强县天津高级中学教务信息网
  18. java模拟器环境_Win10 + Appium+夜神/MuMu模拟器环境搭建
  19. 中年程序员失业的3条退路!
  20. HTML常用标签 选择器

热门文章

  1. 真的,你不了解石家庄。
  2. Word制作表格常用操作
  3. 集总参数电路抽象---线性电路叠加定理理解
  4. CSRF, XSS攻击
  5. Tensorflow使用LSTM实现中文文本分类(1)
  6. MAC OS 下QQ音乐下载存放的位置
  7. VUE vue Expected Object, Function, got String with value “xxx;
  8. Verilog 实现千兆网UDP协议 基于88E1111--数据接收
  9. 使用Office Tool Plus安装office、visio、project等--很实用
  10. cortex m3 开源_开源增强现实耳机,Steam的125M有效帐户等