S3ClassObject.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. from Ansjer.config import *
  2. from boto3.session import Session
  3. import simplejson as json
  4. import boto3
  5. from botocore.client import Config
  6. class S3ClassObject:
  7. def __init__(self, *args, **kwargs):
  8. self.bucket = AWS_BUCKET
  9. self.access_id = AWS_ACCESS_ID
  10. self.access_secret = AWS_ACCESS_SECRET
  11. self.region_name = AWS_ACCESS_REGION
  12. session = Session(
  13. aws_access_key_id=AWS_ACCESS_ID,
  14. aws_secret_access_key=AWS_ACCESS_SECRET,
  15. region_name=AWS_ACCESS_REGION
  16. )
  17. self.conn = session.client('s3')
  18. def put_object(self, body, key, bucket=''):
  19. if bucket == '':
  20. bucket = self.bucket
  21. s3_client = self.conn
  22. response = s3_client.put_object(
  23. Body=body,
  24. Key=key,
  25. Bucket=bucket,
  26. # Expires=datetime()
  27. )
  28. return response
  29. def download_file(self, file_name):
  30. s3_client = self.conn
  31. try:
  32. s3_client.download_file(
  33. self.bucket,
  34. file_name,
  35. )
  36. return file_name
  37. except:
  38. print('Cannot download file', file_name)
  39. return
  40. def get_all_object(self, prefix):
  41. paginator = self.conn.get_paginator('list_objects')
  42. s3_results = paginator.paginate(
  43. Bucket=self.bucket,
  44. Prefix=prefix,
  45. PaginationConfig={'PageSize': 1000}
  46. )
  47. bucket_object_list = []
  48. for page in s3_results:
  49. if "Contents" in page:
  50. for key in page["Contents"]:
  51. s3_file_name = key['Key'].split('/')[-1]
  52. bucket_object_list.append(s3_file_name)
  53. return bucket_object_list
  54. def get_prefix_obj(self, prefix,bucket):
  55. paginator = self.conn.get_paginator('list_objects')
  56. s3_results = paginator.paginate(
  57. Bucket=bucket,
  58. Prefix=prefix,
  59. # PaginationConfig={'PageSize': 1000}
  60. )
  61. bucket_object_list = []
  62. for page in s3_results:
  63. if "Contents" in page:
  64. for key in page["Contents"]:
  65. s3_file_name = key['Key'].split('/')[-1]
  66. bucket_object_list.append(s3_file_name)
  67. return bucket_object_list
  68. def delete_object(self, key):
  69. response = self.conn.delete_object(
  70. Bucket=self.bucket,
  71. Key=key,
  72. )
  73. return response
  74. def get_object(self, key):
  75. response = self.conn.get_object(
  76. Bucket=self.bucket,
  77. Key=key,
  78. )
  79. return response
  80. def del_list_object(self, keydict):
  81. keylist = json.loads(keydict)['keylist']
  82. del_list = []
  83. for i in keylist:
  84. del_list.append({'Key': i})
  85. response = self.conn.delete_objects(
  86. Bucket=self.bucket,
  87. Delete={'Objects': del_list}
  88. )
  89. print(response)
  90. return response
  91. def del_object_list(self, keylist):
  92. del_list = []
  93. for i in keylist:
  94. del_list.append({'Key': i})
  95. response = self.conn.delete_objects(
  96. Bucket=self.bucket,
  97. Delete={'Objects': del_list}
  98. )
  99. print(response)
  100. return response
  101. def get_download_url(self, key):
  102. self.conn.generate_presigned_url(
  103. 'get_object',
  104. Params={
  105. 'Bucket': 'www.mybucket.com',
  106. 'Key': key
  107. },
  108. ExpiresIn=100)
  109. return
  110. # 推mp4到s3,且设置为html5播放
  111. def put_mp4_object(self, body, key):
  112. s3_client = self.conn
  113. response = s3_client.put_object(
  114. Body=body,
  115. Key=key,
  116. Bucket=self.bucket,
  117. ContentType='video/mp4'
  118. )
  119. return response
  120. def get_generate_vod_url(self, key):
  121. response_url = self.conn.generate_presigned_url(
  122. 'get_object',
  123. Params={
  124. 'Bucket': self.bucket,
  125. 'Key': key
  126. },
  127. ExpiresIn=3600
  128. )
  129. return response_url
  130. def sign_put_object(self, key,bucket_meal):
  131. s3_con = boto3.client('s3',
  132. aws_access_key_id=AWS_ACCESS_ID,
  133. aws_secret_access_key=AWS_ACCESS_SECRET,
  134. config=Config(signature_version='s3v4'),
  135. region_name=AWS_ACCESS_ID,
  136. )
  137. try:
  138. url = s3_con.generate_presigned_url(
  139. 'put_object',
  140. Params={
  141. 'Bucket':bucket_meal,
  142. 'Key': key,
  143. },
  144. ExpiresIn=60,
  145. HttpMethod='PUT'
  146. )
  147. except Exception as e:
  148. print(repr(e))
  149. return False
  150. else:
  151. return url
  152. def sign_post_object(self, key,bucket_meal):
  153. s3_con = boto3.client('s3',
  154. aws_access_key_id=AWS_ACCESS_ID,
  155. aws_secret_access_key=AWS_ACCESS_SECRET,
  156. config=Config(signature_version='s3v4'),
  157. region_name=AWS_ACCESS_REGION,
  158. )
  159. try:
  160. data = s3_con.generate_presigned_post(
  161. Key=key,
  162. ExpiresIn=60,
  163. Bucket=bucket_meal
  164. )
  165. except Exception as e:
  166. print(repr(e))
  167. return False
  168. else:
  169. return data