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



我正在尝试通过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"rnContent-Type: text/csvrn",
       @original_filename="wb.csv",
       @tempfile=#<File:/var/folders/zq/kk1mrjjn52zdf8120c4z4tb80000gn/T/RackMultipart20180405-21787-17k4lup>>,
     "commit"=>"Import",
     "format"=>"csv",
     "action"=>"import_csv",
     "controller"=>"admin/growths"}

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

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

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

最新更新