#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)
, но это не вызвало никаких исключений, потому что я вижу пустой файл, созданный на S34. вы проверяли
excel.get_workbook_data()
, не дает ли что-нибудь? Может быть, это пять пустых строк. Некоторые функции после считывания данных из файла, возможно, потребуется использоватьseek(0)
для перемещения в начало файла, чтобы снова получить данные — безseek(0)
этого может произойти чтение из конца файла, и он получит пустые данные.5. @furas Я собираюсь попробовать. Но у меня есть блок finally, который удаляет файл из
/tmp
папки, и снова, когда я вызываю метод, он создаст новый файл