可以使用回形针使用一个多文件选择输入来上传多个文件吗?
问题描述:
所以我在我的rails 3.1应用程序中使用回形针,可以使用回形针使用一个多文件选择输入来上传多个文件吗?
我正在使用关系将图像添加到项目,以便每个项目可以有多个图像。
我想要做的是能够单击浏览按钮并使用单个字段选择多个文件。而不必一次为每个领域制作一张图片。
任何人都知道如何做到这一点,或有一个伟大的选择,这样做不需要Flash插件?
答
我只使用一个控制器,没有关联(我只是将多个图像上传到一个画廊),但我设法做你在问什么。你需要适应它来处理你的关系,但是它对我很好(虽然在IE中不起作用),但我确定它违反了一些轨道约定,但这是我能够构建的唯一途径功能。
的第一步是设置上传字段使用HTML5多标签接受多个文件:
<%= f.file_field :photo, multiple: 'multiple' %>
或者,如果你使用simple_form我一样:
<%= f.input :photo, input_html: { multiple: 'multiple' } %>
下步骤是将创建控制器操作更改为接受并处理多个文件。这是我肯定会反对的一点,但嘿,它的作品!
def create
params[:photo][:photo].each do |photo|
@params = {}
@params['photo'] = photo
@photo = Photo.new(@params)
if [email protected]
respond_to do |format|
format.html { redirect_to new_photo_path, error: 'An error occured uploading.' }
end
end
end
respond_to do |format|
format.html { redirect_to photos_path, notice: 'Photos were successfully uploaded.' }
end
end
所以,很简单比它看起来 - 对我来说,控制器的名字是photo
,所以是字段名,其中解释了params[:photo][:photo]
。它基本上只需要请求的:photo
属性(其中控制器通常期望一个文件)并对已上载的文件进行迭代,从而为每个文件创建新的Photo
并将photo
属性@params
设置为每个文件,然后尝试将其保存为新的Photo
并提醒是否发生错误,否则一旦完成,它将重定向以显示照片。
正如我所说,这对我的伟大工程,我希望这有助于你太:)
编辑如果这没有帮助,你能告诉我为什么吗?在有人花时间帮助之后,忽略这些信息并不会让其他人想要帮助你。
答
不要修改控制器,只需添加name:
属性的表单字段是这样的:
<%= f.input_field :photo, as: :file, multiple: true, name: 'article[photo]' %>
答
这是我如何做的:
params[:photo][:photo].each do |photo|
record = Photo.create(photo: photo)
# if record.errors.any?
# flash[:notice] = record.errors.full_messages.to_sentence
# end
end
其它方法来节省见this post多个记录。