s3boto3signpost.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2020/3/9 11:47
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: s3boto3signpost.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. # from Ansjer.config import *
  15. from boto3.session import Session
  16. import simplejson as json
  17. import boto3
  18. from botocore.client import Config
  19. import requests
  20. def upload():
  21. data = {'url': 'https://azvod1.s3.amazonaws.com/', 'fields': {'key': 'putkey/${filename}', 'AWSAccessKeyId': 'AKIA2E67UIMDUR3B3OOO', 'policy': 'eyJleHBpcmF0aW9uIjogIjIwMjAtMDMtMTNUMDI6NTI6MTlaIiwgImNvbmRpdGlvbnMiOiBbeyJidWNrZXQiOiAiYXp2b2QxIn0sIFsic3RhcnRzLXdpdGgiLCAiJGtleSIsICJwdXRrZXkvIl1dfQ==', 'signature': 'ZDucTfYayCVxKQ2CuCLlUY861Nw='}}
  22. file_path = 'D:/devcode/AnsjerFormal/Ansjer/test/oss.py'
  23. # files = {'file': open(file_path,'rb')}
  24. files = {'file': ('wwww/report.xls', open(file_path, 'rb')),'filename':'xxxooo'}
  25. res = requests.post(url=data['url'],data=data['fields'],files=files)
  26. print(res.text)
  27. upload()
  28. exit()
  29. AWS_ACCESS_ID = 'AKIA2E67UIMDUR3B3OOO'
  30. AWS_ACCESS_SECRET = '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'
  31. AWS_ACCESS_REGION = 'ap-northeast-1'
  32. AWS_BUCKET = 'azvod1'
  33. session = Session(
  34. aws_access_key_id=AWS_ACCESS_ID,
  35. aws_secret_access_key=AWS_ACCESS_SECRET,
  36. region_name=AWS_ACCESS_REGION
  37. )
  38. s3conn = session.client('s3')
  39. ss = s3conn.generate_presigned_post(
  40. Key='putkey/${filename}',
  41. ExpiresIn=3600,
  42. Bucket=AWS_BUCKET
  43. )
  44. print(ss)
  45. exit()
  46. def put_object(self, body, key, bucket=''):
  47. if bucket == '':
  48. bucket = self.bucket
  49. s3_client = self.conn
  50. response = s3_client.put_object(
  51. Body=body,
  52. Key=key,
  53. Bucket=bucket,
  54. # Expires=datetime()
  55. )
  56. return response
  57. def download_file(self, file_name):
  58. s3_client = self.conn
  59. try:
  60. s3_client.download_file(
  61. self.bucket,
  62. file_name,
  63. )
  64. return file_name
  65. except:
  66. print('Cannot download file', file_name)
  67. return
  68. def get_all_object(self, prefix):
  69. paginator = self.conn.get_paginator('list_objects')
  70. s3_results = paginator.paginate(
  71. Bucket=self.bucket,
  72. Prefix=prefix,
  73. PaginationConfig={'PageSize': 1000}
  74. )
  75. bucket_object_list = []
  76. for page in s3_results:
  77. if "Contents" in page:
  78. for key in page["Contents"]:
  79. s3_file_name = key['Key'].split('/')[-1]
  80. bucket_object_list.append(s3_file_name)
  81. return bucket_object_list
  82. def get_prefix_obj(self, prefix, bucket):
  83. paginator = self.conn.get_paginator('list_objects')
  84. s3_results = paginator.paginate(
  85. Bucket=bucket,
  86. Prefix=prefix,
  87. # PaginationConfig={'PageSize': 1000}
  88. )
  89. bucket_object_list = []
  90. for page in s3_results:
  91. if "Contents" in page:
  92. for key in page["Contents"]:
  93. s3_file_name = key['Key'].split('/')[-1]
  94. bucket_object_list.append(s3_file_name)
  95. return bucket_object_list
  96. def delete_object(self, key):
  97. response = self.conn.delete_object(
  98. Bucket=self.bucket,
  99. Key=key,
  100. )
  101. return response
  102. def get_object(self, key):
  103. response = self.conn.get_object(
  104. Bucket=self.bucket,
  105. Key=key,
  106. )
  107. return response
  108. def del_list_object(self, keydict):
  109. keylist = json.loads(keydict)['keylist']
  110. del_list = []
  111. for i in keylist:
  112. del_list.append({'Key': i})
  113. response = self.conn.delete_objects(
  114. Bucket=self.bucket,
  115. Delete={'Objects': del_list}
  116. )
  117. print(response)
  118. return response
  119. def del_object_list(self, keylist):
  120. del_list = []
  121. for i in keylist:
  122. del_list.append({'Key': i})
  123. response = self.conn.delete_objects(
  124. Bucket=self.bucket,
  125. Delete={'Objects': del_list}
  126. )
  127. print(response)
  128. return response
  129. def get_download_url(self, key):
  130. self.conn.generate_presigned_url(
  131. 'get_object',
  132. Params={
  133. 'Bucket': 'www.mybucket.com',
  134. 'Key': key
  135. },
  136. ExpiresIn=100)
  137. return
  138. # 推mp4到s3,且设置为html5播放
  139. def put_mp4_object(self, body, key):
  140. s3_client = self.conn
  141. response = s3_client.put_object(
  142. Body=body,
  143. Key=key,
  144. Bucket=self.bucket,
  145. ContentType='video/mp4'
  146. )
  147. return response
  148. def get_generate_vod_url(self, key):
  149. response_url = self.conn.generate_presigned_url(
  150. 'get_object',
  151. Params={
  152. 'Bucket': self.bucket,
  153. 'Key': key
  154. },
  155. ExpiresIn=3600
  156. )
  157. return response_url
  158. def sign_put_object(self, key, bucket_meal):
  159. s3_con = boto3.client('s3',
  160. aws_access_key_id=AWS_ACCESS_ID,
  161. aws_secret_access_key=AWS_ACCESS_SECRET,
  162. config=Config(signature_version='s3v4'),
  163. region_name=AWS_ACCESS_ID,
  164. )
  165. try:
  166. url = s3_con.generate_presigned_url(
  167. 'put_object',
  168. Params={
  169. 'Bucket': bucket_meal,
  170. 'Key': key,
  171. },
  172. ExpiresIn=60,
  173. HttpMethod='PUT'
  174. )
  175. except Exception as e:
  176. print(repr(e))
  177. return False
  178. else:
  179. return url
  180. def sign_post_object(self, key, bucket_meal):
  181. s3_con = boto3.client('s3',
  182. aws_access_key_id=AWS_ACCESS_ID,
  183. aws_secret_access_key=AWS_ACCESS_SECRET,
  184. config=Config(signature_version='s3v4'),
  185. region_name=AWS_ACCESS_REGION,
  186. )
  187. try:
  188. data = s3_con.generate_presigned_post(
  189. Key=key,
  190. ExpiresIn=60,
  191. Bucket=bucket_meal
  192. )
  193. except Exception as e:
  194. print(repr(e))
  195. return False
  196. else:
  197. return data