python - 应用程序成功推送到heroku,但如何正确引用文件名,使其像在本地主机中一样在线工作
问题描述
所以,我已经成功地将我的应用程序推送到 Heroku 并打开了! faces-application但现在上传和功能已损坏。
我几乎可以肯定我引用文件名的方式是问题,现在它不在我的 localhost 机器上。
UPLOAD_FOLDER_FACES = 'static/uploads/faces/'
app.config['UPLOAD_FOLDER_FACES'] = UPLOAD_FOLDER_FACES
@app.route("/AddFace", methods=["GET", "POST"])
def add_face():
if 'image' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['image']
if file.filename == '':
flash('No image selected for uploading')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
# I think the issue is here, how I am saving the file and handling it.
# If someone could please share some insight into the correct way to
# handle files in heroku hosted python flask apps.
file.save(os.path.join(app.config['UPLOAD_FOLDER_FACES'], filename))
copyfile("static/uploads/faces/" + filename, "faces/" + filename)
flash('Face successfully uploaded, saved and displayed')
return render_template('addface.html', filename=filename)
else:
flash('Allowed image types are -> png, jpg, jpeg, gif')
return redirect(request.url)
return render_template("addface.html")
2020-08-24T16:54:47.951941+00:00 app[web.1]: [2020-08-24 16:54:47,949] ERROR in app: Exception on /NameTag [GET]
2020-08-24T16:54:47.951955+00:00 app[web.1]: Traceback (most recent call last):
2020-08-24T16:54:47.951956+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 2447, in wsgi_app
2020-08-24T16:54:47.951957+00:00 app[web.1]: response = self.full_dispatch_request()
2020-08-24T16:54:47.951957+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request
2020-08-24T16:54:47.951958+00:00 app[web.1]: rv = self.handle_user_exception(e)
2020-08-24T16:54:47.951958+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1821, in handle_user_exception
2020-08-24T16:54:47.951959+00:00 app[web.1]: reraise(exc_type, exc_value, tb)
2020-08-24T16:54:47.951959+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
2020-08-24T16:54:47.951960+00:00 app[web.1]: raise value
2020-08-24T16:54:47.951961+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request
2020-08-24T16:54:47.951961+00:00 app[web.1]: rv = self.dispatch_request()
2020-08-24T16:54:47.951961+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1936, in dispatch_request
2020-08-24T16:54:47.951962+00:00 app[web.1]: return self.view_functions[rule.endpoint](**req.view_args)
2020-08-24T16:54:47.951963+00:00 app[web.1]: File "/app/gui.py", line 194, in name
2020-08-24T16:54:47.951963+00:00 app[web.1]: images = os.listdir(os.path.join(app.static_folder, "nametag"))
2020-08-24T16:54:47.951969+00:00 app[web.1]: FileNotFoundError: [Errno 2] No such file or directory: '/app/static/nametag'
我是否需要构建我的应用程序以使所有内容都驻留在 /app/ 中?
我已经更改了项目结构并创建了一个新版本。推送到 Heroku 并像以前一样打开应用程序。
但是,我仍然收到未找到文件的错误。
我修改了引用以包括 app/
UPLOAD_FOLDER_FACES = '/app/static/uploads/faces/'
但是这个错误仍然存在:
2020-08-25T08:30:26.942622+00:00 app[web.1]: [2020-08-25 08:30:26,940] ERROR in app: Exception on /AddFace [POST]
2020-08-25T08:30:26.942634+00:00 app[web.1]: Traceback (most recent call last):
2020-08-25T08:30:26.942635+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 2447, in wsgi_app
2020-08-25T08:30:26.942635+00:00 app[web.1]: response = self.full_dispatch_request()
2020-08-25T08:30:26.942636+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request
2020-08-25T08:30:26.942636+00:00 app[web.1]: rv = self.handle_user_exception(e)
2020-08-25T08:30:26.942637+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1821, in handle_user_exception
2020-08-25T08:30:26.942637+00:00 app[web.1]: reraise(exc_type, exc_value, tb)
2020-08-25T08:30:26.942637+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
2020-08-25T08:30:26.942638+00:00 app[web.1]: raise value
2020-08-25T08:30:26.942638+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request
2020-08-25T08:30:26.942638+00:00 app[web.1]: rv = self.dispatch_request()
2020-08-25T08:30:26.942638+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1936, in dispatch_request
2020-08-25T08:30:26.942639+00:00 app[web.1]: return self.view_functions[rule.endpoint](**req.view_args)
2020-08-25T08:30:26.942639+00:00 app[web.1]: File "/app/gui.py", line 139, in add_face
2020-08-25T08:30:26.942640+00:00 app[web.1]: file.save(os.path.join(app.config['UPLOAD_FOLDER_FACES'], filename))
2020-08-25T08:30:26.942640+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/werkzeug/datastructures.py", line 3066, in save
2020-08-25T08:30:26.942640+00:00 app[web.1]: dst = open(dst, "wb")
2020-08-25T08:30:26.942646+00:00 app[web.1]: FileNotFoundError: [Errno 2] No such file or directory: '/app/static/uploads/faces/Bret_Point.jpg'
2020-08-25T08:30:26.943461+00:00 app[web.1]: 10.32.185.71 - - [25/Aug/2020:08:30:26 +0000] "POST /AddFace HTTP/1.1" 500 290 "https://faces-application.herokuapp.com/AddFace" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0"
static/sample/ 中的图像在适当的页面上成功加载。
但是在尝试上传要使用的图像时,找不到该文件。
我一直在阅读 Heroku 使用 /tmp/ 进行上传....
我需要上传到 tmp/ 目录吗?
解决方案
解决方案:
要在 heroku 上使用临时/临时存储,您必须引用 /tmp 作为上传目标。
UPLOAD_FOLDER_FACES = '/tmp/'
将引用(如上所示)从 app/static/... 修改为 /tmp/ 有效!但是,之后的复制指令没有。
copyfile("/tmp/" + filename, "tmp/faces/" + filename)
我想如果可以将文件添加到 tmp 目录,他们应该也可以将目录添加到 tmp 。在尝试复制文件之前,我可能需要先在 tmp 中创建 faces 目录,这就是为什么我收到有关该行的错误。
尽管如此,要访问 Heroku 部署的应用程序上的临时存储,请使用
/tmp/
推荐阅读
- c# - 使用 csv Helper 处理 csv 文件中的 invlaid 条目
- swift - 我可以在不使用 Objective-C(纯 swift)的情况下向 React Native 公开 Swift 函数吗?
- javascript - 在 Javascript 数组中循环对象并计算相似项
- javascript - 使 div 内容成为文档对象
- terraform - Terraform - 未在根模块中声明托管资源
- jquery - 使用 JQuery 设置 Datepicker 会同时更改日期和格式
- image - 在颤动中使用资产图像作为选项卡图标
- linux - 没有网络调整(例如端口转发或防火墙例外)的 Linux SSH 服务器(隧道)
- python - Python pandas groupby 聚合一列,同时获取其余列的平均值
- c++ - Hidapi hid_write() 返回错误(Windows 10、C++)