【问题标题】:How can I upload image using AJAX in rails5.1.6如何在 rails5.1.6 中使用 AJAX 上传图片
【发布时间】:2018-10-23 02:16:59
【问题描述】:

我正在使用 Rails 5.1.6 开发小型网站,但在上传图片时遇到了一些问题。我需要使用 AJAX 上传,我通过搜索谷歌找到了一些答案,但我还没有成功。我正在使用 Rails 5.1.6 并使用包含 file_field 的 rails 表单标签。我想使用 AJAX 上传从文件浏览器中选择的图像。

【问题讨论】:

标签: javascript jquery ruby-on-rails


【解决方案1】:

//f.file_field in html.erb will be compiled to <input type='file'>
//you can construct FormData manually, param by param:
var fileInput = document.querySelector('form input[type=file]');
var attachment = fileInput.files[0];
var formData = new FormData(); 
formData.append('email', 'Your Email');
formData.append('attachment', attachment, 'filename.jpg');

//In jQuery you would send it like this:

      $.ajax({
        url: "/profile/upload_image",
        type: "POST",
        beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
        data: "data=" + formData,
        success: function(data) {
          ...
        }
      });

我也遇到过这种问题。 您可以使用 AJAX 将图像文件的信息发送到您的 rails API,然后您可以上传带有信息的图像。 要通过 AJAX(例如从 )上传文件,您需要将参数包装在 FormData 对象中。

【讨论】:

  • 谢谢,我试过这种方式,我已经解决了。强烈推荐你。
【解决方案2】:

完整答案是here

const uploadFile = element => {
  const formData = new FormData();
  formData.append("your_model[attribute_name]", element.target.files[0]);

  Rails.ajax({
    url: "your_model/:id",
    type: "PUT",
    beforeSend(xhr, options) {
      options.data = formData;
      return true;
    },
    success: response => {
      if (response.success) {
        alert("File uploaded successfully");
      }
      else {
        alert(response.errors.join("<br>"));
      }
    },
    error: () => {
      alert("ajax send error");
    }
  });
};

const documentOnReady = () => {
  const fileField = document.getElementById("ajax_file_upload");
  if (fileField) {
    fileField.addEventListener("change", uploadFile);
  }
}

document.addEventListener("turbolinks:load", documentOnReady);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2016-11-27
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多