Ошибка 400 при загрузке большого двоичного объекта в облачное хранилище - PullRequest
0 голосов
/ 29 мая 2019

Я создал CSV-файл в облачной функции.Теперь мне нужно загрузить его в облачное хранилище.Я сохранил его в файле / tmp.Оттуда я должен загрузить его в облачное хранилище.

Используемый код -

def upload_blob(bucket_name, source_file_name, destination_blob_name):
    """Uploads a file to the bucket."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)
    blob.upload_from_file(source_file_name)
    print('File {} uploaded to {}.'.format(source_file_name,destination_blob_name))

final_df.to_csv('/tmp/'+file_name)
with open('/tmp/'+file_name, 'r') as file_obj:
    upload_blob('test-bucket',file_obj,file_name)

Но я сталкиваюсь со следующей ошибкой -

BadRequest: 400 PUT https://www.googleapis.com/upload/storage/v1/b/test-bucket/o?uploadType=resumable&upload_id=ABC: ('Request failed with status code', 400, 'Expected one of', <HTTPStatus.OK: 200>, 308)

Файлхранится в папке / tmp.Оттуда это не загружается.В чем именно может быть ошибка?

1 Ответ

1 голос
/ 29 мая 2019

Множество возможных причин ошибки 400 Плохой запрос (не 404). Возможно, вам следует указать полный путь, и вам не нужно открывать файл и передавать его в source_file_name. Вот то, что я пытался успешно загрузить объект (попробовал это с mp3-файлом) в GCS

from google.cloud import storage

def upload_blob(bucket_name, source_file_name, destination_blob_name):
    """Uploads a file to the bucket."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)

    blob.upload_from_filename(source_file_name)

    print('File {} uploaded to {}.'.format(
        source_file_name,
        destination_blob_name))


if __name__ == '__main__':
    upload_blob ("[bucketname]", "/home/[username]/[filename]", "[filename]")
...