javascript - 目录 : Accept File Upload and Copy&Paste Upload

标签 javascript ruby-on-rails ruby

我想让用户可以使用 HTML 输入上传 CSV 文件,或者将列数据复制并粘贴到文本框中,然后创建 CSV 文件,将其保存到模型中。

你知道有什么好的库或实用的方法来解决这个问题吗?

最佳答案

伪实现示例:

测试在 Rails 5.2 上使用 ActiveStorage

假设你已经set up ActiveStorage ,

app/models/foo.rb

class Foo < ApplicationRecord
  has_one_attached :csv

  # sets `csv` attachment from a String input
  # i.e. value = "Name,Age,\nBen,24,\nJenny,23,\nGeorge,21,\n"
  def csv_string=(value)
    tempfile = Tempfile.new
    tempfile << value
    tempfile.close

    self.csv = ActionDispatch::Http::UploadedFile.new(
      tempfile: tempfile,
      type: 'text/csv',
      filename: 'some_file_name.csv' # << change this filename accordingly
    )
  end
end

app/views/foos/_form.html.erb

<%= form_with(model: @foo, local: true) do |form| %>
  <!-- ... -->
  <%= form.file_field :csv %>
  <%= form.text_area :csv_string %>
  <!-- ... -->
<% end %>

app/controllers/foos_controller.rb

class FoosController < ApplicationController

  def create
    @foo = Foo.new(foo_params)
    # ...
  end

  private

  def foo_params
    params.require(:foo).permit(:csv, :csv_string)
  end
end

您的TODO:

  • 添加一些 JS,允许用户为 CSV 选择“文件上传”或“文本区域”(即一些 JS 将隐藏/显示(和“启用”/“禁用”)输入之一相应地),因为如果你没有这种交互,它会让用户感到困惑,因为上面的 file_field 和 text_area 并排出现在表单上。 (但只有一个可行:如果两者均由用户输入,csv_string 将覆盖 csv 的值)

关于javascript - 目录 : Accept File Upload and Copy&Paste Upload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55395054/

相关文章:

javascript - 是否可以使用 KeyMap 绑定(bind)到常规 DOM 元素

ruby-on-rails - 有谁知道在哪里可以找到一套在线 Ruby 编程集/练习?

ruby - 如何查找以字符串形式给出确切 HTML 标记的节点(使用 Nokogiri)?

jquery - Rails 4 中的 Ajax 加载微调器

javascript - 如何使用 cron 从 bash 运行 Node 脚本

javascript - OO JS 的好例子?

ruby-on-rails - Rails link_to 与远程 : true not requesting JS

ruby - 在 ruby​​ 中发送具有特定 http 版本协议(protocol)的 http 请求

javascript - 如何在 iOS 上使用 cordova/phonegap 更改 img 源

ruby-on-rails - 为什么 Sidekiq 不关闭旧连接?