|
|
|
import datetime
|
|
|
|
import hashlib
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import time
|
|
|
|
|
|
|
|
import aliyunsdkcore
|
|
|
|
import oss2 as oss2
|
|
|
|
from aliyunsdkcore.client import AcsClient, DEFAULT_SDK_CONNECTION_TIMEOUT_IN_SECONDS
|
|
|
|
from aliyunsdkcore.request import CommonRequest
|
|
|
|
|
|
|
|
|
|
|
|
class UploadPhoto(AcsClient):
|
|
|
|
|
|
|
|
def __init__(self, ak='LTAIeS8aBuPBZxV2', secret='hyPeTaDQBQs6jetYcqY0BUdpacXTH3', region_id="cn-hongkong",
|
|
|
|
auto_retry=True, max_retry_time=3,
|
|
|
|
user_agent=None, port=80, timeout=DEFAULT_SDK_CONNECTION_TIMEOUT_IN_SECONDS, public_key_id=None,
|
|
|
|
private_key=None, session_period=3600, credential=None, debug=False):
|
|
|
|
super().__init__(ak, secret, region_id, auto_retry, max_retry_time, user_agent, port, timeout, public_key_id,
|
|
|
|
private_key, session_period, credential, debug)
|
|
|
|
aliyunsdkcore.request.set_default_protocol_type("https")
|
|
|
|
self.domain = 'cloudphoto.cn-shanghai.aliyuncs.com'
|
|
|
|
self.version = '2017-07-11'
|
|
|
|
self.LibraryId = None
|
|
|
|
self.StoreName = None
|
|
|
|
|
|
|
|
def get_md5_01(self, file_path):
|
|
|
|
md5 = None
|
|
|
|
if os.path.isfile(file_path):
|
|
|
|
f = open(file_path, 'rb')
|
|
|
|
md5_obj = hashlib.md5()
|
|
|
|
md5_obj.update(f.read())
|
|
|
|
hash_code = md5_obj.hexdigest()
|
|
|
|
f.close()
|
|
|
|
md5 = str(hash_code).lower()
|
|
|
|
return md5
|
|
|
|
|
|
|
|
def assumeRole(self):
|
|
|
|
request = CommonRequest(domain='sts.aliyuncs.com', version='2015-04-01',
|
|
|
|
action_name='AssumeRole')
|
|
|
|
RoleSessionName = 'pqh'
|
|
|
|
request.add_query_param('RoleArn', 'acs:ram::1098806312754985:role/aliyuncloudphotodefaultrole')
|
|
|
|
request.add_query_param('RoleSessionName', RoleSessionName)
|
|
|
|
response = json.loads(self.do_action_with_exception(request).decode())
|
|
|
|
print(response['Credentials']['SecurityToken'])
|
|
|
|
|
|
|
|
def createAction(self, action):
|
|
|
|
return CommonRequest(domain=self.domain, version=self.version,
|
|
|
|
action_name=action)
|
|
|
|
|
|
|
|
def do_action_with_exception(self, acs_request):
|
|
|
|
return json.loads(super().do_action_with_exception(acs_request).decode())
|
|
|
|
|
|
|
|
def showOption(self, options, key, desc):
|
|
|
|
choose = []
|
|
|
|
for index, option in enumerate(options):
|
|
|
|
choose.append(option[key])
|
|
|
|
print('{index}:{name}'.format(index=index + 1, name=option[key]))
|
|
|
|
return choose[(int)(input('输入{desc}\n'.format(desc=desc))) - 1]
|
|
|
|
|
|
|
|
def getSL(self):
|
|
|
|
request = self.createAction('ListPhotoStores')
|
|
|
|
response = self.do_action_with_exception(request)
|
|
|
|
print('PhotoStores:')
|
|
|
|
photoStores = response['PhotoStores']
|
|
|
|
self.StoreName = self.showOption(photoStores, 'Name', 'StoreName')
|
|
|
|
|
|
|
|
# request = self.createAction('GetPhotoStore')
|
|
|
|
# request.add_query_param('StoreName', StoreName)
|
|
|
|
# response = self.do_action_with_exception(request)
|
|
|
|
# print(response)
|
|
|
|
|
|
|
|
request = self.createAction('FetchLibraries')
|
|
|
|
request.add_query_param('StoreName', self.StoreName)
|
|
|
|
response = self.do_action_with_exception(request)
|
|
|
|
Libraries = response['Libraries']
|
|
|
|
self.LibraryId = self.showOption(Libraries, 'LibraryId', 'LibraryId')
|
|
|
|
|
|
|
|
# request = self.createAction('GetLibrary')
|
|
|
|
# request.add_body_params('StoreName', StoreName)
|
|
|
|
# request.add_body_params('LibraryId', LibraryId)
|
|
|
|
# response = self.do_action_with_exception(request)
|
|
|
|
# print(response)
|
|
|
|
|
|
|
|
def uploadPhoto(self):
|
|
|
|
if self.StoreName is None or self.LibraryId is None:
|
|
|
|
return '未选择StoreName、LibraryId'
|
|
|
|
|
|
|
|
request = self.createAction('CreateTransaction')
|
|
|
|
filePath = input('输入上传文件路径')
|
|
|
|
fileName = filePath.split('/')[-1]
|
|
|
|
request.add_query_param('Size', os.path.getsize(filePath))
|
|
|
|
request.add_query_param('Ext', fileName[-fileName[::-1].index('.'):])
|
|
|
|
request.add_query_param('Md5', self.get_md5_01(filePath))
|
|
|
|
request.add_query_param('StoreName', self.StoreName)
|
|
|
|
|
|
|
|
request.add_query_param('LibraryId', self.LibraryId)
|
|
|
|
response = self.do_action_with_exception(request)
|
|
|
|
print(response)
|
|
|
|
Upload = response['Transaction']['Upload']
|
|
|
|
FileId = Upload['FileId']
|
|
|
|
SessionId = Upload['SessionId']
|
|
|
|
Bucket = Upload['Bucket']
|
|
|
|
OssEndpoint = Upload['OssEndpoint']
|
|
|
|
ObjectKey = Upload['ObjectKey']
|
|
|
|
|
|
|
|
auth = oss2.Auth(self.get_access_key(), self.get_access_secret())
|
|
|
|
bucket = oss2.Bucket(auth, OssEndpoint, Bucket)
|
|
|
|
with open(filePath, 'rb') as fileobj:
|
|
|
|
result = bucket.put_object(ObjectKey, fileobj)
|
|
|
|
print('文件上传状态{status}'.format(status=result.status))
|
|
|
|
|
|
|
|
request = self.createAction('CreatePhoto')
|
|
|
|
request.add_query_param('FileId', FileId)
|
|
|
|
request.add_query_param('PhotoTitle', fileName)
|
|
|
|
request.add_query_param('SessionId', SessionId)
|
|
|
|
request.add_query_param('StoreName', self.StoreName)
|
|
|
|
request.add_query_param('UploadType', 'manual')
|
|
|
|
request.add_query_param('LibraryId', self.LibraryId)
|
|
|
|
response = self.do_action_with_exception(request)
|
|
|
|
print(response)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
client = UploadPhoto()
|
|
|
|
client.getSL()
|
|
|
|
request = client.createAction('ListPhotos')
|
|
|
|
request.add_query_param('StoreName', client.StoreName)
|
|
|
|
request.add_query_param('LibraryId', client.LibraryId)
|
|
|
|
request.add_query_param('State', 'all')
|
|
|
|
response = client.do_action_with_exception(request)
|
|
|
|
print(response)
|
|
|
|
|
|
|
|
IdStr = client.showOption(response['Photos'], 'IdStr', '照片Id')
|
|
|
|
|
|
|
|
request = client.createAction('EditPhotos')
|
|
|
|
request.add_query_param('PhotoId.1', IdStr)
|
|
|
|
request.add_query_param('StoreName', client.StoreName)
|
|
|
|
request.add_query_param('LibraryId', client.LibraryId)
|
|
|
|
request.add_query_param('ShareExpireTime', int(round(time.time() * 1000)) + 60 * 60)
|
|
|
|
response = client.do_action_with_exception(request)
|
|
|
|
print(response)
|
|
|
|
|
|
|
|
request = client.createAction('GetPublicAccessUrls')
|
|
|
|
request.add_query_param('DomainType', 'OSS')
|
|
|
|
request.add_query_param('PhotoId.1', IdStr)
|
|
|
|
request.add_query_param('StoreName', client.StoreName)
|
|
|
|
request.add_query_param('ZoomType', 'style/1')
|
|
|
|
request.add_query_param('LibraryId', client.LibraryId)
|
|
|
|
response = client.do_action_with_exception(request)
|
|
|
|
print(response)
|