2018/1/15
Rails - 多檔上傳
假設有一個 Controller 叫做 `imgur`,大概是這樣:
```
rails g scaffold imgur pictures
```
而 Controller 內的 params 只允許傳遞 pictures 陣列:
```
def imgur_params
params.require(:imgur).permit(pictures: [])
end
```
一個最基本的檔案上傳表單長這樣:
```
<%= form_for(imgur) do |f| %>
<%= f.file_field :pictures %>
<%= f.submit %>
<% end %>
```
會因為 pictures 只吃陣列的關係,就傳不進去。如果想要上傳多個檔案,要加上 `multiple: true`:
```
<%= form_for(imgur) do |f| %>
<%= f.file_field :pictures, multiple: true %>
<%= f.submit %>
<% end %>
```
可以使用多個 f.file_field 來做上傳:
```
<%= form_for(imgur) do |f| %>
<%= f.file_field :pictures, multiple: true %>
<%= f.file_field :pictures, multiple: true %>
<%= f.submit %>
<% end %>
```
如果想要改用 `file_field_tag` 的話,就必須在 `form_for` 加上 `multipart: true`:
```
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]" %>
<%= f.submit %>
<% end %>
```
加上 [] 之後,即使只傳一個檔也能通過 `params.permit`。
如果想要多檔上傳:
```
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]", multiple: true %>
<%= f.submit %>
<% end %>
```
也可以這樣:
```
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]" %>
<%= file_field_tag "imgur[pictures][]" %>
<%= f.submit %>
<% end %>
```
或者這樣:
```
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]", multiple: true %>
<%= file_field_tag "imgur[pictures][]", multiple: true %>
<%= f.submit %>
<% end %>
```
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言