Flask отправляет временный файл с помощью send_file

Я пытаюсь отправить файл xlsx пользователю. У меня он пишет во временный файл, но я получаю следующую ошибку:

TypeError: invalid file: <tempfile._TemporaryFileWrapper object at 0x04A79F90>

Я не уверен, как это исправить... ниже мой код для создания временного файла. Любые рекомендации или предложения приветствуются и оцениваются:

    price_tf = tempfile.TemporaryFile()
    writer = pd.ExcelWriter(price_tf, engine='xlsxwriter')
    price_list_df.to_excel(writer, sheet_name='Price List')
    workbook = writer.book
    worksheet = writer.sheets['Price List']
    writer.sheets['Price List'].set_column('C:C', 45)
    writer.sheets['Price List'].set_column('D:D', 65)
    writer.sheets['Price List'].set_column('E:E', 12)
    writer.sheets['Price List'].set_column('F:F', 6)
    writer.save()
    writer.close()
    myio = io.StringIO()
    with open(price_tf, 'rb') as f:
        data = f.read()

    myio.write(data)
    myio.seek(0)
    send_file(myio, attachment_filename="price_list.xlsx", as_attachment=True, mimetype='text/xlsx')

person AlliDeacon    schedule 26.04.2017    source источник
comment
Что это за платформа? Возможно, вам придется использовать атрибут file объекта price_tf для доступа к истинному файловому объекту.   -  person pjcunningham    schedule 27.04.2017


Ответы (1)


TempFile исчезает в tmp.close() Я обновил, чтобы использовать tmp.mkstemp()

Это исправило мою проблему

person AlliDeacon    schedule 27.04.2017
comment
Но тогда, когда вы очистите файл? tmp.mkstemp() не удаляет файл. - person mgfernan; 28.01.2020