我正在尝试访问上传到 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)
添加回答
举报
0/150
提交
取消