Загрузка файла excel во второй раз создание пустого файла excel в S3 с использованием python

#python #amazon-s3 #aws-api-gateway

Вопрос:

 import boto3

def upload(excel, bucket, file_name):
    S3_CLIENT = boto3.client("s3")
    fp = pathlib.Path(f"/tmp/{file_name}")
    try:
        fp.write_bytes(excel.get_workbook_data())
        S3_CLIENT.upload_file(str(fp.absolute()), bucket, 'file_key_in_s3', ExtraArgs={"ContentType": 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'})
    finally:
        fp.unlink()
 

Это мой метод загрузки в S3. Это лямбда-код, подключенный к шлюзу API. поэтому, когда я попал в него в первый раз, он генерирует правильный файл Excel, но когда я делаю это во второй раз, он генерирует пустую электронную таблицу Excel и загружает ее в S3.

get_workbook_data это метод, который получает информацию в excel

PS: Если я снова применю тот же метод через 5 минут, я увижу правильный файл Excel.

Кто-нибудь сталкивался с такой же проблемой? Не мог бы кто-нибудь, пожалуйста, помочь мне?

Я пытался использовать заголовки различий в postman, но напрасно

Комментарии:

1. может быть, сначала вам следует except Exception as ex: print(ex) проверить, не возникнет ли у вас какой-либо ошибки. ИЛИ сначала попробуйте без try/finally

2. вы можете использовать / для присоединения имя файла — fp = pathlib.Path("/tmp") / file_name . Или даже вот так fp = pathlib.Path("/") / "tmp" / file_name

3. @furas Попытался except Exception as ex: print(ex) , но это не вызвало никаких исключений, потому что я вижу пустой файл, созданный на S3

4. вы проверяли excel.get_workbook_data() , не дает ли что-нибудь? Может быть, это пять пустых строк. Некоторые функции после считывания данных из файла, возможно, потребуется использовать seek(0) для перемещения в начало файла, чтобы снова получить данные — без seek(0) этого может произойти чтение из конца файла, и он получит пустые данные.

5. @furas Я собираюсь попробовать. Но у меня есть блок finally, который удаляет файл из /tmp папки, и снова, когда я вызываю метод, он создаст новый файл