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

我正在尝试访问上传到 Heroku 临时文件存储系统的文件。(我知道这些文件仅适用于特定的 dyno)文档说 /tmp 目录是上传到的位置。


我相信我的重定向网址端点不正确:


.py


UPLOAD_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-application

Running bash on ⬢ faces-application... up, run.3918 (Free)

~ $ ls

Aptfile  forms.py  gui.py  Procfile  requirements.txt  runtime.txt  static  templates

~ $ pwd

/app

~ $ cd ..

/ $ ls

app  bin  dev  etc  lib  lib64  lost+found  proc  sbin  sys  tmp  usr  var

/ $ pwd

/

/ $ cd var

/var $ ls

lib  log  tmp

/var $ pwd

/var


这也没有取得成功的结果。


Heroku 上传与哪个 /tmp 关联? 我想知道我是否需要在 /app/ 中创建一个 tmp 目录,因为 Heroku 没有创建它?或者 Heroku 使用 '/' tmp 目录还是 /var/ tmp 目录?



回首忆惘然
浏览 85回答 1
1回答

慕容森

这实际上是两个独立的问题,但我想我可以帮助解决这两个问题: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 herefile.seek(0)key.set_contents_from_file(file, headers=None, replace=True, cb=None, num_cb=10, policy=None, md5=None)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python