为了账号安全,请及时绑定邮箱和手机立即绑定

访问 tmp 文件 Heroku Flask 应用程序和/或利用 AWS S3 存储

访问 tmp 文件 Heroku Flask 应用程序和/或利用 AWS S3 存储

回首忆惘然 2023-07-05 10:15:19
我正在尝试访问上传到 Heroku 临时文件存储系统的文件。(我知道这些文件仅适用于特定的 dyno)文档说 /tmp 目录是上传到的位置。我相信我的重定向网址端点不正确:.pyUPLOAD_FOLDER_FACES = '/app/tmp/'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)        file.save(os.path.join(app.config['UPLOAD_FOLDER_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")@app.route('/displayfaces/<filename>')def display_image_face(filename):    # print('display_image filename: ' + filename)    return redirect(url_for('app', filename='tmp/' + filename), code=301)  <-----error超文本标记语言{% if filename %}    <div>        <img src="{{ url_for('display_image_face', filename=filename) }}">    </div>{% endif %}我使用 bash 探索了 heroku 上的文件结构:C:\Flask\app>heroku run bash --app faces-applicationRunning bash on ⬢ faces-application... up, run.3918 (Free)~ $ lsAptfile  forms.py  gui.py  Procfile  requirements.txt  runtime.txt  static  templates~ $ pwd/app~ $ cd ../ $ lsapp  bin  dev  etc  lib  lib64  lost+found  proc  sbin  sys  tmp  usr  var/ $ pwd// $ cd var/var $ lslib  log  tmp/var $ pwd/var这也没有取得成功的结果。Heroku 上传与哪个 /tmp 关联? 我想知道我是否需要在 /app/ 中创建一个 tmp 目录,因为 Heroku 没有创建它?或者 Heroku 使用 '/' tmp 目录还是 /var/ tmp 目录?
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

这实际上是两个独立的问题,但我想我可以帮助解决这两个问题:

werkzeug.routing.BuildError:无法使用值 ['filename'] 为端点“app”构建 url。您的意思是“添加”吗?

对于此错误,您需要了解该函数app不存在。所以 Flask 不知道该怎么办。

return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

对于 S3 错误,您必须知道文件对象的行为就像旧的录音带:一旦读取,您需要将其倒回到开头

我想这段代码可以解决问题:

s3 = boto.connect_s3()

bucket = s3.get_bucket("facesappstorage")

key = bucket.new_key(filename)

# Have a look here

file.seek(0)

key.set_contents_from_file(file, headers=None, replace=True, cb=None, num_cb=10, policy=None, md5=None)


查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信