oss_file.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # -*- coding: utf-8 -*-
  2. import shutil
  3. import oss2
  4. class OssServeClient(object):
  5. def __init__(self, config):
  6. '''
  7. 文件存储客户端
  8. 目前使用阿里云OSS对象存储服务
  9. 注意:文件读写,都是以object-name为索引,请保存object-name
  10. '''
  11. self.auth = None
  12. self.bucket = None
  13. self._access_key_id = config.get("access_key_id", "")
  14. self._access_key_secret = config.get("access_key_secret", "")
  15. self._endpoint = config.get("endpoint", "")
  16. self._bucket_name = config.get("bucket_name", "")
  17. self.do_auth()
  18. def do_auth(self):
  19. '''
  20. 身份验证
  21. '''
  22. auth = oss2.Auth(self._access_key_id, self._access_key_secret)
  23. bucket = oss2.Bucket(auth, self._endpoint, self._bucket_name)
  24. self.auth = auth
  25. self.bucket = bucket
  26. def delete_object(self, object_name: str) -> (any, any):
  27. '''
  28. 删除内容
  29. '''
  30. result = self.bucket.delete_object(object_name)
  31. status, request_id = result.status, result.request_id
  32. return status, request_id
  33. def upload_bytes_file(self, object_name: str, file_content: bytes):
  34. '''
  35. 文件上传
  36. :param object_name: fid
  37. :param file_content: 文件流
  38. :return:
  39. '''
  40. result = self.bucket.put_object(object_name, file_content)
  41. status, request_id = result.status, result.request_id
  42. return status, request_id
  43. def download_file(self, object_name, save_path):
  44. '''
  45. 文件下载到本地
  46. :param object_name: fid
  47. :param save_path: 保存路径
  48. :return:
  49. '''
  50. object_stream = self.bucket.get_object_to_file(object_name, save_path)
  51. if object_stream.status == 200:
  52. return True
  53. def download_file_stream(self, object_name, filename):
  54. '''
  55. 文件流下载
  56. :param object_name: fid
  57. :param filename: 文件路径
  58. :return:
  59. '''
  60. object_stream = self.bucket.get_object(object_name)
  61. with open(filename, 'wb') as file:
  62. shutil.copyfileobj(object_stream, file)
  63. return object_stream.status, filename