#python #flask #heroku
#python #flask #heroku
Вопрос:
Я получаю изображение через Flask и сохраняю response.content в файл PNG на Heroku. Затем имя этого изображения передается вызывающей функции, которая использует имя файла в обслуживаемом HTML. Я проверяю, что файл существует сразу после его сохранения, проверил целостность файла в автономном режиме, и все работает; но через секунду после сохранения его на Heroku он не существует при отображении на веб-странице. Журналы сервера выглядят следующим образом:
2020-10-08T20:07:00.542480 00:00 app[web.1]: saved fast_graph to disk @ temp/a45329e9-b76b-4714-9e5a-3463b1b6eaf1.png
2020-10-08T20:07:00.542502 00:00 app[web.1]: verified file: temp/a45329e9-b76b-4714-9e5a-3463b1b6eaf1.png
2020-10-08T20:07:01.934587 00:00 app[web.1]: 10.13.251.139 - - [08/Oct/2020:20:07:01 0000] "GET /temp/a45329e9-b76b-4714-9e5a-3463b1b6eaf1.png HTTP/1.1" 404 232 "http://XXX.herokuapp.com/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0"
2020-10-08T20:07:01.937442 00:00 heroku[router]: at=info method=GET path="/temp/a45329e9-b76b-4714-9e5a-3463b1b6eaf1.png" host=XXX.herokuapp.com request_id=37f77e3b-35ce-4355-b5ca-84b84a51718b fwd="X.X.191.107" dyno=web.1 connect=1ms service=4ms status=404 bytes=400 protocol=http
Является ли это свойством эфемерной файловой системы Heroku или я делаю что-то не так? Мой код выглядит следующим образом:
# get file path of generated chart
response = requests.get(
if90_clientbase f"?client_id={client_id}amp;action={api_action}")
# check the outcome
outcome = response.json().get("outcome")
if not outcome:
return False
# get the filename and fetch the file
file_name = response.json().get("value")
response = requests.get (if90_filesbase f"?file_name={file_name}")
# generate filename, save fetched content
save_file = f"{temp_folder}{lib_misc.unique_filename()}.png"
with open(save_file, 'wb') as f:
f.write(response.content)
return save_file
Ответ №1:
Мой плохой. Файлы и папки в дереве разработки не отображаются в представлении веб-папок. Если вы столкнулись с подобной проблемой, хорошим местом для начала является ваша папка /static .