使用Flask会话管理多个上传

时间:2013-07-22 02:25:23

标签: list session upload flask imgur

我有以下情况。我在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”],等等,但这会对图像施加限制(取决于我创建的图像的数量),使代码非常难看,对每个代码进行迭代以生成传递给专辑构建方法的列表有问题,并且会话清除将是乏味的。

我编写的一些代码用于在最后获取实际链接并清除会话(这假设会话['link']有一个url列表,我无法通过会话管理知识实现这一点在烧瓶中:

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'])

提前感谢您的时间!

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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文档所涵盖的)。