通过curl将CSV文件上传到Ruby on Rails后端

时间:2018-04-05 09:19:01

标签: ruby-on-rails csv curl

我正在尝试通过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"}

1 个答案:

答案 0 :(得分:1)

在你的卷曲中你做错了。您将文件名作为参数发送而不是文件本身

curl -F import_file=@wb.csv http://localhost:3000/api/v1/process_data?api_key=Dp9Kv7j1y-FYytd-tYsAsSNic3ox.

试试这个。这与你的第二个输出相同,这就是rails处理文件上传的方式。