【问题标题】:How to create a folder on openshift for a site that allows users to upload images如何在 openshift 上为允许用户上传图像的站点创建文件夹
【发布时间】:2014-05-18 23:55:46
【问题描述】:

你好,对不起(这里是编程新手)!我正在使用 Flask 和 SQLalchemy 和 postgresql 创建一个站点,用户可以在其中上传图像。到目前为止,我一直在弄清楚如何在 openshift 数据目录中实现或创建一个文件夹,该文件夹将存储这些上传的图像。此外,我还在研究如何将这些图像定向到在 openshift 中创建的文件夹。我正在修补我在互联网上看到的零碎代码。下面是我从在线示例中使用的代码,该代码在上传到 openshift 时会导致问题。

app.config['UPLOAD_FOLDER'] = '/static/img/'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])


def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1] in app.config['ALLOWED_EXTENSIONS']

@app.route('/test')
def test():
    return render_template('test.html')

@app.route('/upload', methods=['POST'])
def upload():
    # Get the name of the uploaded file
    file = request.files['file']
    # Check if the file is one of the allowed types/extensions
    if file and allowed_file(file.filename):
        # Make the filename safe, remove unsupported chars
        filename = secure_filename(file.filename)
        # Move the file form the temporal folder to
        # the upload folder we setup
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        # Redirect the user to the uploaded_file route, which
        # will basicaly show on the browser the uploaded file
        return redirect(url_for('uploaded_file',
                                filename=filename))

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename)      

该站点在定位保存上传图像的路径时遇到错误(因此将其调回以显示)。如果有人可以就我如何实现某种关系以将用户帐户(其数据已存储在 POSTgresql 数据库中)链接到他上传的图像提供任何提示,我将不胜感激。请尽量避免使用繁重的编码术语,因为我是一个自学编码的新手。谢谢一百万!

尊敬的, 最大

【问题讨论】:

    标签: postgresql flask openshift flask-sqlalchemy


    【解决方案1】:

    我看不到您在哪里设置上传路径,但 Openshift 为数据目录提供了环境变量:OPENSHIFT_DATA_DIR。您也可以为每个用户的 ID 创建一个文件夹,并将他们的图片存储在他们自己的文件夹中。但是,数据目录不可扩展,因为它只会上传到您的用户点击的服务器,并且您需要同步每个实例的所有数据目录。也许考虑使用 Amazon S3 或其他一些存储,这样您就可以扩展您的 Openshift 应用程序,而不必担心扩展上传。

    【讨论】:

    • 嘿,感谢您浏览它。是的,我在某处读过它,上传路径应该在那个数据目录中。但是,是否可以在该“数据目录文件夹”中创建另一个文件夹以便更好地组织。此外,由于可能有无限数量的用户,我正在考虑将 db 附加到上传的图像 url,这将与用户的用户名有关系。再次感谢!
    • 是的,您可以通过 SSH 进入您的实例并通过 shell 创建一个目录。上传路径应该是数据目录,因为当你推送新代码时它不会被覆盖。当您刚刚开始测试您的代码时,这很有用,但 Amazon S3 或其他一些存储更适合生产,因此您可以设置您的应用程序以随负载扩展。
    • 好吧,等我回来再试一试,然后告诉你进展如何。非常感谢!
    • 您需要将其设置为等于 os.environ['OPENSHIFT_DATA_DIR']。并且可能将您在目录中创建的子文件夹附加到它。
    • 只需更改问题中代码的第一行,以便 app.config['UPLOAD_FOLDER'] 等于您想要的数据目录路径。一旦您通过 SSH 连接到您的实例,它就只是一个 Linux shell。所以你可以运行一个普通的 mkdir 命令来创建文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多