如何从上传到openshift数据目录并存储在postgresql数据库中的文件中获取图像路径/url?
我是一个自学成才的编程新手,所以请容忍我。我正在尝试创建一个网站,允许用户上传他们的图像。有了另一位用户的耐心,我能够得到一些关于如何创建并允许用户将他们的图像上传到openshift上的数据驱动器的答案。但是,现在我需要能够将图像路径或url存储到postgresql数据库(稍后可以调用该数据库),以便每个用户能够跟踪他们上载的图像。我现在被这件事困扰着。 以下是我认为在回答这个问题时起着重要作用的代码片段:如何从上传到openshift数据目录并存储在postgresql数据库中的文件中获取图像路径/url?,postgresql,python-2.7,flask,openshift,flask-sqlalchemy,Postgresql,Python 2.7,Flask,Openshift,Flask Sqlalchemy,我是一个自学成才的编程新手,所以请容忍我。我正在尝试创建一个网站,允许用户上传他们的图像。有了另一位用户的耐心,我能够得到一些关于如何创建并允许用户将他们的图像上传到openshift上的数据驱动器的答案。但是,现在我需要能够将图像路径或url存储到postgresql数据库(稍后可以调用该数据库),以便每个用户能够跟踪他们上载的图像。我现在被这件事困扰着。 以下是我认为在回答这个问题时起着重要作用的代码片段: class Todo(db.Model): __tablen
class Todo(db.Model):
__tablename__ = 'todos'
id = db.Column('todo_id', db.Integer, primary_key=True)
title = db.Column(db.String(60))
text = db.Column(db.String)
done = db.Column(db.Boolean)
pub_date = db.Column(db.DateTime)
user_id = db.Column(db.Integer, db.ForeignKey('users.user_id'))
image_url = db.Column(db.String)
def __init__(self, title, text, image_url):
self.title = title
self.text = text
self.image_url = image_url
self.done = False
self.pub_date = datetime.utcnow()
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in app.config['ALLOWED_EXTENSIONS']
@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)
@app.route('/new', methods=['GET', 'POST'])
@login_required
def new():
if request.method == 'POST':
if not request.form['title']:
flash('Title is required', 'error')
elif not request.form['text']:
flash('Text is required', 'error')
else:
todo = Todo(request.form['title'], request.form['text'])
todo.user = g.user
db.session.add(todo)
db.session.commit()
flash('Todo item was successfully created')
return redirect(url_for('index'))
return render_template('new.html')
类待办事项(db.Model):
__tablename_uu='todos'
id=db.Column('todo\u id',db.Integer,primary\u key=True)
title=db.Column(db.String(60))
text=db.Column(db.String)
done=db.Column(db.Boolean)
发布日期=db.Column(db.DateTime)
user\u id=db.Column(db.Integer,db.ForeignKey('users.user\u id'))
image\u url=db.Column(db.String)
定义初始化(自我、标题、文本、图像url):
self.title=标题
self.text=文本
self.image\u url=image\u url
self.done=False
self.pub_date=datetime.utcnow()
允许的def_文件(文件名):
在文件名和\
app.config['ALLOWED_EXTENSIONS']中的filename.rsplit('.',1)[1]
@app.route('/upload',methods=['POST'])
def upload():
#获取上载文件的名称
file=request.files['file']
#检查文件是否为允许的类型/扩展名之一
如果文件和允许的文件(file.filename):
#确保文件名安全,删除不支持的字符
filename=secure\u文件名(file.filename)
#将文件从临时文件夹移动到
#我们设置的上载文件夹
保存(os.path.join(app.config['UPLOAD\u FOLDER'],文件名))
#将用户重定向到上载的_文件路由,该路由
#基本上我会在浏览器上显示上传的文件吗
返回重定向(url_用于('上载的_文件'),
文件名=文件名)
@app.route(“/uploads/”)
def上传文件(文件名):
从_目录返回发送_(app.config['UPLOAD_FOLDER'],
文件名)
@app.route('/new',methods=['GET','POST'])
@需要登录
def new():
如果request.method==“POST”:
如果不是请求。表格['title']:
flash('需要标题','错误')
elif未请求。表格['text']:
flash('需要文本','错误')
其他:
todo=todo(request.form['title'],request.form['text']))
todo.user=g.user
db.session.add(todo)
db.session.commit()
闪存(“Todo项已成功创建”)
返回重定向(url_for('index'))
返回render_模板('new.html')
我的当前代码是由各种教程和示例拼凑而成的。
目前,我正在尝试合并“Todo”db、“upload”函数和“new”函数,但收效甚微。利用我所掌握的一点知识,我只添加了“image_url”部分,其中将有一列用于存放图像路径。如果有人能解释一下这个难题,我将不胜感激。非常感谢
恭敬地,
Max您是否将文件本地存储在web主机上?如果是这样的话,它可能很简单,只需将web服务器配置为在特定URL上提供静态内容,并让代码根据该信息生成URL。啊,是的,我确实在web主机上存储。然而,从服务器中提取特定的URL并不像我想象的那么容易。至于现在,我还在修改代码。如果我找到解决这个问题的方法,我会在这里更新。无论如何谢谢你!