bos.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import sys
  4. import json
  5. import numpy as np
  6. from baidubce.services.bos import bos_handler
  7. from baidubce.services.bos import storage_class
  8. from baidubce.services.bos import canned_acl
  9. from baidubce.bce_client_configuration import BceClientConfiguration
  10. from baidubce.auth.bce_credentials import BceCredentials
  11. import bos_sample_conf
  12. #导入BOS相关模块
  13. from baidubce import exception
  14. from baidubce.services import bos
  15. from baidubce.services.bos import canned_acl
  16. from baidubce.services.bos.bos_client import BosClient
  17. #设置请求超时时间
  18. #bos_sample_conf.config.connection_timeout_in_mills = TIMEOUT
  19. #设置接收缓冲区大小
  20. #bos_sample_conf.config.recv_buf_size(BUF_SIZE)
  21. #设置发送缓冲区大小
  22. #bos_sample_conf.config.send_buf_size(BUF_SIZE)
  23. #设置连接重试策略
  24. #三次指数退避重试
  25. #bos_sample_conf.config.retry_policy = BackOffRetryPolicy()
  26. #不重试
  27. #bos_sample_conf.config.retry_policy = NoRetryPolicy()
  28. bos_client = BosClient(bos_sample_conf.config)
  29. """
  30. response = bos_client.list_buckets()
  31. for bucket in response.buckets:
  32. print (bucket.name)
  33. """
  34. #根据ListObjects接口来获取图片的key,prefix为前缀
  35. def get_objects(prefix, max_keys=10):
  36. objects = bos_client.list_objects('ocrtrips', max_keys=max_keys, prefix=prefix)
  37. return objects.contents
  38. #上传
  39. def put_bos(object_key, file_name, bucket_name='ctrimgs'):
  40. bos_client.put_object_from_file(bucket_name, object_key, file_name)
  41. return 'https://ctrimgs.bj.bcebos.com/' + object_key
  42. #return bos_client.put_object_from_file(bucket_name, object_key, file_name)
  43. #删除
  44. def delete_bos(object_key, bucket_name='ctrimgs'):
  45. bos_client.delete_object(bucket_name, object_key)
  46. return ''
  47. #下载
  48. def get_bos(bucket_name, object_key, file_name):
  49. bos_client.get_object_to_file(bucket_name,
  50. object_key,
  51. file_name)
  52. #bos查询
  53. def get_object_lists(buckent_name, prefix, max_keys=10):
  54. objects = bos_client.list_objects(buckent_name, max_keys=max_keys, prefix=prefix)
  55. return objects.contents
  56. #分块上传 文件大于5G
  57. def get_multipart(bucket_name, object_key, file_name):
  58. upload_id = bos_client.initiate_multipart_upload(bucket_name, object_key).upload_id
  59. left_size = os.path.getsize(file_name)
  60. #设置分块的开始偏移位置
  61. offset = 0
  62. part_number = 1
  63. part_list = []
  64. while left_size > 0:
  65. #设置每块为5MB
  66. part_size = 5 * 1024 * 1024
  67. if left_size < part_size:
  68. part_size = left_size
  69. response = bos_client.upload_part_from_file(
  70. bucket_name, object_key, upload_id, part_number, part_size, file_name, offset)
  71. left_size -= part_size
  72. offset += part_size
  73. part_list.append({
  74. "partNumber": part_number,
  75. "eTag": response.metadata.etag
  76. })
  77. part_number += 1
  78. bos_client.complete_multipart_upload(bucket_name, object_key, upload_id, part_list)
  79. '''
  80. print bos_client.get_bucket_location(bucket_name)
  81. print bos_client.does_bucket_exist(bucket_name)
  82. #put_bos(bucket_name, 'data.jpg', '')
  83. response = bos_client.get_object_meta_data(bucket_name, 'data.jpg')
  84. print(response)
  85. url = bos_client.generate_pre_signed_url(bucket_name,
  86. 'data.jpg',
  87. -1)
  88. print(url)
  89. #get_bos(bucket_name, 'hadoop-client.tar', './')
  90. '''
  91. #print(put_bos('20210616/16-471802237.jpg', 'image/20210616/16-471802237.jpg'))