[Alibaba Cloud] Android 기기에서 OSS에 액세스
목적
Android 단말에서 Alibaba Cloud의 OSS(S3)에 파일을 업로드, 다운로드한다.
개발 환경
Android 7.0
Windows 10
Alibaba Cloud
Alibaba 구성
Alibaba 문서 대로 구성해 갑니다.
이번에는 App Server (응용 프로그램 서버)에 관해서는 ECS를 사용하지 않고,
· ApiGateway
· Function Compute
를 사용하여 그림
1.Request STS credentials
2.Request AsuumeRole
3.Return STS Credentials
4.Return STS Credentials
를 구현합니다.
설정
OSS 설정
Alibaba 문서
OSS 데모 소개
참조
1.OSS에서 버킷 만들기
2.STS 활성화
*AccessKeyID
*AccessKeySecret
*RoleArm
저장하는 것을 잊지 않는 것
Function Compute 설정
1. 함수 만들기
test.py#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore import client
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
import json
def getSts(event, context):
AccessKeyID = "Your AccessKey"
AccessKeySecret = "Your SecretAccessKey"
roleArn = "Your RoleArn"
clt = client.AcsClient(AccessKeyID,AccessKeySecret,'ap-northeast-1')
request = AssumeRoleRequest.AssumeRoleRequest()
request.set_RoleArn(roleArn)
request.set_RoleSessionName('external-username')
try:
response = clt.do_action_with_exception(request)
text = json.loads(response)
stsDict = {}
stsDict["StatusCode"] = "200"
stsDict["body"] = {}
stsDict["body"] = text["Credentials"]
stsDict["body"]["StatusCode"] = stsDict["StatusCode"]
except Exception as e:
errorDict = dict().fromkeys(['StatusCode','ErrorCode','ErrorMessage'])
errorDict["StatusCode"] = "500"
errorDict["ErrorMessage"] = e.message
errorDict["ErrorCode"] = e.error_code
stsText = json.dumps(errorDict)
return stsDict
pass
여기 왜, 출력하는 JSON은 body 안에 기술하지 않으면
Android의 SDK에서는 값을 얻을 수 없었기 때문에 주의가 필요.
(왜 json에서 body 선언이 필요한지 이해하지 못합니다)
ApiGateway 설정
기본 요청
Path: 선택
프로토콜: HTTP
HTTP Method : GET
요청 모드 : 요청 매개 변수 매핑
백엔드 서비스 정보
백엔드 서비스 유형: FunctionCompute
리전: FunctionCompute가 설정된 리전
서비스 이름: FunctionCompute에서 설정한 서비스 이름
함수 이름: FunctionCompute에서 설정한 함수 이름
Role Arn: STS를 활성화할 때 저장한 RoleArn
반환되는 응답
반환되는 유형: JSON (application/json; charset=utf-8)
Android 측 설정
Alibaba 문서
OSS 데모 소개
안드로이드 소스 코드를 참고로했습니다.
버튼을 레이아웃에 하나만 추가합니다.
MainActiviy.ktclass MainActivity : AppCompatActivity() {
val endPoint = "OSS のエンドポイント"
val stsServer = "API のエンドポイント"
fun getOSSCredentialProvider() : OSSCredentialProvider {
return OSSAuthCredentialsProvider(stsServer)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val oss = getOSSClient(getOSSCredentialProvider())
val get = GetObjectRequest("OSSのバケット名", "取得したいファイル名")
oss.asyncGetObject(get, object : OSSCompletedCallback<GetObjectRequest, GetObjectResult>{
override fun onSuccess(request: GetObjectRequest?, result: GetObjectResult?) {
Log.d("MainActivity", "success")
}
override fun onFailure(
request: GetObjectRequest?,
clientException: ClientException?,
serviceException: ServiceException?
) {
Log.d("MainActivity", "end")
}
})
}
}
}
※API Gateway의 엔드포인트는 서브도메인에 패스를 추가
※S3의 엔드 포인트
Logcat에서
2018-12-14 18:08:25.755 2652-3947/net.zaisan.alibabaosssamle D/MainActivity: success
제대로 취득할 수 있는 것을 확인할 수 있었다☆
PUT 또는 Delete 할 수 있는 환경의 베이스가 생겼으므로,
이것을 응용해 가고 싶다.
요약
API Gateway와 ComputeFunction을 사용하여 STS 인증으로 OSS를 제어할 수 있었다.
ECS를 사용하지 않는 것으로, 서버리스로 간단하게 구축할 수 있는 것은 좋다고 생각한다.
Reference
이 문제에 관하여([Alibaba Cloud] Android 기기에서 OSS에 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tetsu0831/items/2084260b47424a66b6c5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Android 7.0
Windows 10
Alibaba Cloud
Alibaba 구성
Alibaba 문서 대로 구성해 갑니다.
이번에는 App Server (응용 프로그램 서버)에 관해서는 ECS를 사용하지 않고,
· ApiGateway
· Function Compute
를 사용하여 그림
1.Request STS credentials
2.Request AsuumeRole
3.Return STS Credentials
4.Return STS Credentials
를 구현합니다.
설정
OSS 설정
Alibaba 문서
OSS 데모 소개
참조
1.OSS에서 버킷 만들기
2.STS 활성화
*AccessKeyID
*AccessKeySecret
*RoleArm
저장하는 것을 잊지 않는 것
Function Compute 설정
1. 함수 만들기
test.py#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore import client
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
import json
def getSts(event, context):
AccessKeyID = "Your AccessKey"
AccessKeySecret = "Your SecretAccessKey"
roleArn = "Your RoleArn"
clt = client.AcsClient(AccessKeyID,AccessKeySecret,'ap-northeast-1')
request = AssumeRoleRequest.AssumeRoleRequest()
request.set_RoleArn(roleArn)
request.set_RoleSessionName('external-username')
try:
response = clt.do_action_with_exception(request)
text = json.loads(response)
stsDict = {}
stsDict["StatusCode"] = "200"
stsDict["body"] = {}
stsDict["body"] = text["Credentials"]
stsDict["body"]["StatusCode"] = stsDict["StatusCode"]
except Exception as e:
errorDict = dict().fromkeys(['StatusCode','ErrorCode','ErrorMessage'])
errorDict["StatusCode"] = "500"
errorDict["ErrorMessage"] = e.message
errorDict["ErrorCode"] = e.error_code
stsText = json.dumps(errorDict)
return stsDict
pass
여기 왜, 출력하는 JSON은 body 안에 기술하지 않으면
Android의 SDK에서는 값을 얻을 수 없었기 때문에 주의가 필요.
(왜 json에서 body 선언이 필요한지 이해하지 못합니다)
ApiGateway 설정
기본 요청
Path: 선택
프로토콜: HTTP
HTTP Method : GET
요청 모드 : 요청 매개 변수 매핑
백엔드 서비스 정보
백엔드 서비스 유형: FunctionCompute
리전: FunctionCompute가 설정된 리전
서비스 이름: FunctionCompute에서 설정한 서비스 이름
함수 이름: FunctionCompute에서 설정한 함수 이름
Role Arn: STS를 활성화할 때 저장한 RoleArn
반환되는 응답
반환되는 유형: JSON (application/json; charset=utf-8)
Android 측 설정
Alibaba 문서
OSS 데모 소개
안드로이드 소스 코드를 참고로했습니다.
버튼을 레이아웃에 하나만 추가합니다.
MainActiviy.ktclass MainActivity : AppCompatActivity() {
val endPoint = "OSS のエンドポイント"
val stsServer = "API のエンドポイント"
fun getOSSCredentialProvider() : OSSCredentialProvider {
return OSSAuthCredentialsProvider(stsServer)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val oss = getOSSClient(getOSSCredentialProvider())
val get = GetObjectRequest("OSSのバケット名", "取得したいファイル名")
oss.asyncGetObject(get, object : OSSCompletedCallback<GetObjectRequest, GetObjectResult>{
override fun onSuccess(request: GetObjectRequest?, result: GetObjectResult?) {
Log.d("MainActivity", "success")
}
override fun onFailure(
request: GetObjectRequest?,
clientException: ClientException?,
serviceException: ServiceException?
) {
Log.d("MainActivity", "end")
}
})
}
}
}
※API Gateway의 엔드포인트는 서브도메인에 패스를 추가
※S3의 엔드 포인트
Logcat에서
2018-12-14 18:08:25.755 2652-3947/net.zaisan.alibabaosssamle D/MainActivity: success
제대로 취득할 수 있는 것을 확인할 수 있었다☆
PUT 또는 Delete 할 수 있는 환경의 베이스가 생겼으므로,
이것을 응용해 가고 싶다.
요약
API Gateway와 ComputeFunction을 사용하여 STS 인증으로 OSS를 제어할 수 있었다.
ECS를 사용하지 않는 것으로, 서버리스로 간단하게 구축할 수 있는 것은 좋다고 생각한다.
Reference
이 문제에 관하여([Alibaba Cloud] Android 기기에서 OSS에 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tetsu0831/items/2084260b47424a66b6c5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
OSS 설정
Alibaba 문서
OSS 데모 소개
참조
1.OSS에서 버킷 만들기
2.STS 활성화
*AccessKeyID
*AccessKeySecret
*RoleArm
저장하는 것을 잊지 않는 것
Function Compute 설정
1. 함수 만들기
test.py
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore import client
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
import json
def getSts(event, context):
AccessKeyID = "Your AccessKey"
AccessKeySecret = "Your SecretAccessKey"
roleArn = "Your RoleArn"
clt = client.AcsClient(AccessKeyID,AccessKeySecret,'ap-northeast-1')
request = AssumeRoleRequest.AssumeRoleRequest()
request.set_RoleArn(roleArn)
request.set_RoleSessionName('external-username')
try:
response = clt.do_action_with_exception(request)
text = json.loads(response)
stsDict = {}
stsDict["StatusCode"] = "200"
stsDict["body"] = {}
stsDict["body"] = text["Credentials"]
stsDict["body"]["StatusCode"] = stsDict["StatusCode"]
except Exception as e:
errorDict = dict().fromkeys(['StatusCode','ErrorCode','ErrorMessage'])
errorDict["StatusCode"] = "500"
errorDict["ErrorMessage"] = e.message
errorDict["ErrorCode"] = e.error_code
stsText = json.dumps(errorDict)
return stsDict
pass
여기 왜, 출력하는 JSON은 body 안에 기술하지 않으면
Android의 SDK에서는 값을 얻을 수 없었기 때문에 주의가 필요.
(왜 json에서 body 선언이 필요한지 이해하지 못합니다)
ApiGateway 설정
기본 요청
Path: 선택
프로토콜: HTTP
HTTP Method : GET
요청 모드 : 요청 매개 변수 매핑
백엔드 서비스 정보
백엔드 서비스 유형: FunctionCompute
리전: FunctionCompute가 설정된 리전
서비스 이름: FunctionCompute에서 설정한 서비스 이름
함수 이름: FunctionCompute에서 설정한 함수 이름
Role Arn: STS를 활성화할 때 저장한 RoleArn
반환되는 응답
반환되는 유형: JSON (application/json; charset=utf-8)
Android 측 설정
Alibaba 문서
OSS 데모 소개
안드로이드 소스 코드를 참고로했습니다.
버튼을 레이아웃에 하나만 추가합니다.
MainActiviy.ktclass MainActivity : AppCompatActivity() {
val endPoint = "OSS のエンドポイント"
val stsServer = "API のエンドポイント"
fun getOSSCredentialProvider() : OSSCredentialProvider {
return OSSAuthCredentialsProvider(stsServer)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val oss = getOSSClient(getOSSCredentialProvider())
val get = GetObjectRequest("OSSのバケット名", "取得したいファイル名")
oss.asyncGetObject(get, object : OSSCompletedCallback<GetObjectRequest, GetObjectResult>{
override fun onSuccess(request: GetObjectRequest?, result: GetObjectResult?) {
Log.d("MainActivity", "success")
}
override fun onFailure(
request: GetObjectRequest?,
clientException: ClientException?,
serviceException: ServiceException?
) {
Log.d("MainActivity", "end")
}
})
}
}
}
※API Gateway의 엔드포인트는 서브도메인에 패스를 추가
※S3의 엔드 포인트
Logcat에서
2018-12-14 18:08:25.755 2652-3947/net.zaisan.alibabaosssamle D/MainActivity: success
제대로 취득할 수 있는 것을 확인할 수 있었다☆
PUT 또는 Delete 할 수 있는 환경의 베이스가 생겼으므로,
이것을 응용해 가고 싶다.
요약
API Gateway와 ComputeFunction을 사용하여 STS 인증으로 OSS를 제어할 수 있었다.
ECS를 사용하지 않는 것으로, 서버리스로 간단하게 구축할 수 있는 것은 좋다고 생각한다.
Reference
이 문제에 관하여([Alibaba Cloud] Android 기기에서 OSS에 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tetsu0831/items/2084260b47424a66b6c5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class MainActivity : AppCompatActivity() {
val endPoint = "OSS のエンドポイント"
val stsServer = "API のエンドポイント"
fun getOSSCredentialProvider() : OSSCredentialProvider {
return OSSAuthCredentialsProvider(stsServer)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val oss = getOSSClient(getOSSCredentialProvider())
val get = GetObjectRequest("OSSのバケット名", "取得したいファイル名")
oss.asyncGetObject(get, object : OSSCompletedCallback<GetObjectRequest, GetObjectResult>{
override fun onSuccess(request: GetObjectRequest?, result: GetObjectResult?) {
Log.d("MainActivity", "success")
}
override fun onFailure(
request: GetObjectRequest?,
clientException: ClientException?,
serviceException: ServiceException?
) {
Log.d("MainActivity", "end")
}
})
}
}
}
API Gateway와 ComputeFunction을 사용하여 STS 인증으로 OSS를 제어할 수 있었다.
ECS를 사용하지 않는 것으로, 서버리스로 간단하게 구축할 수 있는 것은 좋다고 생각한다.
Reference
이 문제에 관하여([Alibaba Cloud] Android 기기에서 OSS에 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tetsu0831/items/2084260b47424a66b6c5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)