def save(file, folder): #新建BosClient bos_client = getClient() key = _random_string(6) file_name = file.filename fp = file.stream try: fp.seek(0, os.SEEK_END) content_length = fp.tell() fp.seek(0) recv_buf_size = bos_client._get_config_parameter(None, 'recv_buf_size') content_md5 = utils.get_md5_from_fp(fp, length=content_length, buf_size=recv_buf_size) content_type = utils.guess_content_type_by_file_name(file_name) bos_client.put_object(bucket_name, folder + key, fp, content_length=content_length, content_md5=content_md5, content_type=content_type) # bos_client.put_object_from_file(bucket_name,folder+key,file) url = bos_client.generate_pre_signed_url(bucket_name, folder + key, int(time.time()), -1) return (url, folder + key, int(content_length)) finally: fp.close()
def put_object_from_file(self, bucket, key, file_name, content_length=None, content_md5=None, content_type=None, content_sha256=None, user_metadata=None, storage_class=None, user_headers=None, config=None): """ Put object and put content of file to the object :type bucket: string :param bucket: None :type key: string :param key: None :type file_name: string :param file_name: None :type options: dict :param options: None :return: **HttpResponse Class** """ fp = open(file_name, 'rb') try: if content_length is None: fp.seek(0, os.SEEK_END) content_length = fp.tell() fp.seek(0) if content_md5 is None: recv_buf_size = self._get_config_parameter( config, 'recv_buf_size') content_md5 = utils.get_md5_from_fp(fp, length=content_length, buf_size=recv_buf_size) if content_type is None: content_type = utils.guess_content_type_by_file_name(file_name) return self.put_object(bucket, key, fp, content_length=content_length, content_md5=content_md5, content_type=content_type, content_sha256=content_sha256, user_metadata=user_metadata, storage_class=storage_class, user_headers=user_headers, config=config) finally: fp.close()
def put_object_from_string(self, bucket, key, data, content_md5=None, content_type=None, content_sha256=None, user_metadata=None, storage_class=None, user_headers=None, config=None): """ Create object and put content of string to the object :type bucket: string :param bucket: None :type key: string :param key: None :type input_content: string :param input_content: None :type options: dict :param options: None :return: **HTTP Response** """ if isinstance(data, str): data = data.encode(baidubce.DEFAULT_ENCODING) fp = None try: fp = io.BytesIO(data) if content_md5 is None: content_md5 = utils.get_md5_from_fp( fp, buf_size=self._get_config_parameter( config, 'recv_buf_size')) return self.put_object(bucket, key, fp, content_length=len(data), content_md5=content_md5, content_type=content_type, content_sha256=content_sha256, user_metadata=user_metadata, storage_class=storage_class, user_headers=user_headers, config=config) finally: if fp is not None: fp.close()
def test_get_object_to_file_with_range(self): """test get_object_to_file function with range""" err = None try: response = self.bos.put_object_from_string(self.BUCKET, self.KEY, "a" * 1000) except BceServerError as e: err = e finally: self.assertIsNone(err) self.check_headers(response) fp = open(self.FILENAME, "w") fp.write('a' * 100) fp.close() fp = open(self.FILENAME, "rb") md5 = utils.get_md5_from_fp(fp) fp.close() os.remove(self.FILENAME) err = None try: response = self.bos.get_object_to_file(self.BUCKET, self.KEY, self.FILENAME, range=(0, 99)) except BceServerError as e: err = e finally: self.assertIsNone(err) self.check_headers(response) self.assertEqual(response.metadata.content_range, 'bytes 0-99/1000') fp = open(self.FILENAME, "rb") get_md5 = utils.get_md5_from_fp(fp) fp.close() self.assertEqual(get_md5, md5)
def put_object_from_file(self, bucket, key, file_name, content_length=None, content_md5=None, content_type=None, content_sha256=None, user_metadata=None, config=None): """ Put object and put content of file to the object :type bucket: string :param bucket: None :type key: string :param key: None :type file_name: string :param file_name: None :type options: dict :param options: None :return: **HttpResponse Class** """ fp = open(file_name, 'rb') try: if content_length is None: fp.seek(0, os.SEEK_END) content_length = fp.tell() fp.seek(0) if content_md5 is None: recv_buf_size = self._get_config_parameter(config, 'recv_buf_size') content_md5 = utils.get_md5_from_fp(fp, length=content_length, buf_size=recv_buf_size) if content_type is None: content_type = utils.guess_content_type_by_file_name(file_name) return self.put_object(bucket, key, fp, content_length=content_length, content_md5=content_md5, content_type=content_type, content_sha256=content_sha256, user_metadata=user_metadata, config=config) finally: fp.close()
def put_object_from_string(self, bucket, key, data, content_md5=None, content_type=None, content_sha256=None, user_metadata=None, config=None): """ Create object and put content of string to the object :type bucket: string :param bucket: None :type key: string :param key: None :type input_content: string :param input_content: None :type options: dict :param options: None :return: **HTTP Response** """ if isinstance(data, unicode): data = data.encode(baidubce.DEFAULT_ENCODING) fp = None try: fp = cStringIO.StringIO(data) if content_md5 is None: content_md5 = utils.get_md5_from_fp( fp, buf_size=self._get_config_parameter(config, 'recv_buf_size')) return self.put_object(bucket, key, fp, content_length=len(data), content_md5=content_md5, content_type=content_type, content_sha256=content_sha256, user_metadata=user_metadata, config=config) finally: if fp is not None: fp.close()