1

我有以下情况。我在 Flask 中创建了一个简单的后端来处理文件上传。收到文件后,Flask 会做一些事情(上传文件),并将数据返回给调用者。该应用程序有两种场景,上传一张图片和多张图片。上传一张图片时,我可以简单地得到响应,瞧,我准备好了。

但是,我坚持处理多个文件上传。我可以为实际的文件上传使用相同的处理程序,但问题是所有这些文件都需要存储到一个列表或其他东西中,然后进行处理,然后,一个包含所有这些图像的链接(专辑),需要交付。

这是我的上传处理代码:

@app.route('/uploadv3', methods=['POST'])
def upload():
    if request.method == 'POST':
        data_file = request.files["file"]
        file_name = data_file.filename
        path_to_save_to = os.path.join(app.config['UPLOAD_FOLDER'], file_name)
        data_file.save(path_to_save_to)
        file_url = upload_image_to_image_host(path_to_save_to)
        return file_url

我在烧瓶中试验会话,但我不知道我是否可以在一个键下创建一个项目列表,比如 session ['links'],然后获取所有这些,并在完成工作后将其清除。还是有其他更简单的解决方案?

我假设我可能可以通过每个图像的键来执行此操作,例如 session [“link1”] 等等,但这会对图像施加限制(取决于我创建的图像数量),会使代码非常丑陋,对每个进行迭代以生成传递给专辑构建方法的列表有问题,并且会话清除将是乏味的。

我为在最后获取实际链接并清除会话而编写的一些代码如下(假设 session['link'] 有一个 url 列表,根据我在 Flask 中的会话管理知识,我无法真正实现:

def create_album(images):
    session.pop('link', None)
    new_album = im.create_album(images)
    return new_album.link

@app.route('/get_album_link')
def get_album_link():
    return create_album(session['link'])

在此先感谢您的时间!

4

2 回答 2

1

您可以将任何内容分配给会话,包括单个值或列表/字典等。如果您知道链接,则可以将它们存储在会话中,如下所示:

session['links'] = ['link1','link2'...and so on]

这样,您就有了所有链接的列表。您现在可以通过以下方式访问链接:

if 'links' in session:
    for link in session['links']:
        print link

完成它们后,您可以将会话清除为:

if 'links' in session:
    del session['links']
于 2013-07-22T13:49:11.627 回答
0

澄清我为完成这项工作所做的工作。最后,似乎上传图像并将它们匿名添加到相册必须“反向”完成,因此不是将图像添加到相册对象,而是将图像对象上传到相册 id。

我制作了一个获取专辑链接并将其放入会话的方法:@app.route('/get_album_link')

def get_album_link():
    im = pyimgur.Imgur(CLIENT_ID)
    new_album = im.create_album()
    session.clear()
    session['album'] = new_album.deletehash
    session['album_link'] = new_album.link
    return new_album.link

稍后,在处理上传时,我只是将图像添加到相册中,瞧,一切就绪:)

uploaded_image = im.upload_image(path_of_saved_image, album=session['album'])
file_url = uploaded_image.link
return file_url

需要注意的是,应该将图像添加到作为专辑值传递的“deleteahash”值中,而不是专辑 ID(由 imgur api 文档介绍)。

于 2013-07-24T14:14:36.977 回答