我有以下情况。我在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'])
提前感谢您的时间!
答案 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文档所涵盖的)。