【发布时间】:2014-02-22 02:39:16
【问题描述】:
我正在通过name 和输入数量是动态的文件输入上传多个图像。
但是,它们确实遵循此命名约定:
<input name = "image_path" ...
<input name = "image_path_F1" ...
<input name = "image_path_F2" ...
<input name = "image_path_F3" ...
输入作为FormData 对象发送。
在处理我之前使用的 Python 脚本中的单个图像时:
uploaded_image = request.files.name_of_file_input_here
问题
request.files 是否有通用的“catch all”类型的方法,可以像这样使用:
uploaded_images = request.files.*all
或者我需要创建某种循环来处理可能的文件名,例如:
客户端(jQuery)
var names_array = ["image_path","image_path_F1","image_path_F2"];
var length_of_names_array = 3;
发送到 Python...
Python
names_array = request.forms.names_array
length_of_names_array = request.forms.length_of_names_array
counter = 1
for i, val in enumerate(range(length_of_names_array)):
if i == 0:
constructor = "image_path"
request.files.constructor
else:
constructor = "image_path_F" + str(counter)
request.files.constructor
counter += 1
上面的代码只会生成正确的名称(实际上我不确定上面的 request.files 方法是否适用于 constructor - edit,它似乎没有) .
这里的方法可能有解决方案:
https://stackoverflow.com/a/3111795/1063287
但我不太明白它是如何运作的,或者它究竟如何应用于上述场景:
如果你不知道密钥,你可以遍历文件:
for filename, file in request.FILES.iteritems():
name = request.FILES[filename].name
【问题讨论】:
-
您可以控制表单输入的命名吗?我认为这将是一个更简单的解决方案。
-
它们是按照上面显示的约定动态命名的,因为输入的数量是动态的。必须有一种方法来做到这一点,我只是花了一些时间来弄清楚如何 - 即如何获取 Python 脚本中定义的每个输入,以便我可以将每个文件放入数据库中。
-
您是否控制这些输入的动态命名方案?
标签: jquery python-2.7 bottle form-data