我正在尝试通过curl
将文件发送到控制器操作。
这是我试过的:
curl -F "file=wb.csv" http://localhost:3000/api/v1/process_data?api_key=Dp9Kv7j1y-FYytd-tYsAsSNic3ox
然而,在我的控制器中,我检查了发送的参数的内容,它只返回文件名wb.csv
而不是csv附件:
{"file"=>"wb.csv", "api_key"=>"Dp9Kv7j1y-FYytd-tYsAsSNic3ox", "format"=>"json", "action"=>"import_csv", "controller"=>"api/v1/growth_utils"}
我希望实现与在UI上从表单发布相同的内容:
<%= form_tag import_csv_admin_growths_path, multipart: true do %>
<%= file_field_tag :file %>
<%= submit_tag "Import" %>
<%end%>
控制器动作中有哪些参数:
{"file"=>
#<ActionDispatch::Http::UploadedFile:0x007faa0543b7d0
@content_type="text/csv",
@headers="Content-Disposition: form-data; name=\"file\"; filename=\"wb.csv\"\r\nContent-Type: text/csv\r\n",
@original_filename="wb.csv",
@tempfile=#<File:/var/folders/zq/kk1mrjjn52zdf8120c4z4tb80000gn/T/RackMultipart20180405-21787-17k4lup>>,
"commit"=>"Import",
"format"=>"csv",
"action"=>"import_csv",
"controller"=>"admin/growths"}
答案 0 :(得分:1)
在你的卷曲中你做错了。您将文件名作为参数发送而不是文件本身
curl -F import_file=@wb.csv http://localhost:3000/api/v1/process_data?api_key=Dp9Kv7j1y-FYytd-tYsAsSNic3ox.
试试这个。这与你的第二个输出相同,这就是rails处理文件上传的方式。