ruby-on-rails - Rails Carrier Wave 与 JQuery Uploader

标签 ruby-on-rails json jquery carrierwave

我正在使用 Rails Carrier Wave 和 JQuery Upload,就像这样 rails tutorial ,但是当我点击上传按钮时出现错误:

Error: SyntaxError: JSON.parse

非常感谢任何建议/建议。

最佳答案

为什么不尝试Uploadify

步骤 1

gem 'carrier_wave' 添加到您的 Gemfile 中。

步骤 2

将此代码保存到/lib/flash_session_cookie_middleware.rb:

require 'rack/utils'

class FlashSessionCookieMiddleware
  def initialize app, session_key = '_session_id'
    @app = app
    @session_key = session_key
  end

  def call env
    if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
      request = Rack::Request.new env
      env['HTTP_COOKIE'] = [@session_key, request.params[@session_key]].join('=').freeze unless request.params[@session_key].nil?
      env['HTTP_ACCEPT'] = "#{request.params['_http_accept']}".freeze unless request.params['_http_accept'].nil?
    end

    @app.call env
  end
end

步骤 3

编辑session_store.rb并将此代码添加到文件末尾:

Rails.application.config.middleware.insert_before(
  ActionDispatch::Session::CookieStore,
  FlashSessionCookieMiddleware,
  Rails.application.config.session_options[:key]
)

步骤 4

下载Uploadify并解压它。

步骤 5

  1. jquery.uploadify.v2.1.4.min.jsswfobject.js 复制到 /app/assets/javascripts 如果您使用 Rails 3.1 或更高版本;到 /public/javascripts(如果您使用 Rails 3.0 或更早版本)。
  2. uploadify.swfcancel.png 复制到 /app/assets/images//public/images
  3. uploadify.css 复制到 /app/assets/stylesheets//public/stylesheets

第 6 步

编辑您的 application.js 并插入以下内容:

//= require swfobject
//= require jquery.uploadify

步骤 7

在您的上传页面中,添加以下内容:

<input id="uploadify" name="uploadify" type="file"/>

步骤 8

将此代码添加到您的上传脚本中:

$(document).ready(function() {
  <% key = Rails.application.config.session_options[:key] %>
  var uploadify_script_data = {};
  var csrf_param = $('meta[name=csrf-param]').attr('content');
  var csrf_token = $('meta[name=csrf-token]').attr('content');
  uploadify_script_data[csrf_param] = encodeURI(encodeURIComponent(csrf_token));
  uploadify_script_data['<%= key %>'] = '<%= cookies[key] %>';

  $('#uploadify').uploadify({
    uploader        : '/assets/uploadify.swf',
    script          : '/photos',
    cancelImg       : '/images/cancel.png',
    auto            : true,
    multi           : true,
    removeCompleted     : true,
    scriptData      : uploadify_script_data,
    onComplete      : function(event, ID, fileObj, doc, data) {
    }
  });
});

步骤 9

像这样编写你的 Controller :

def create
  @photo = Photo.new image: params[:file_data]
  @photo.save
end

注意:这是使用 Uploadify 2.1.4 进行测试的。

关于ruby-on-rails - Rails Carrier Wave 与 JQuery Uploader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363698/

相关文章:

javascript - 仅单击一次 datepicker td 有效

jquery - 在同一 div 内的类别和子类别之间切换

ruby-on-rails - 翻译模型的复数形式

ruby-on-rails - 给观察者动态添加回调方法

javascript - 为什么最后一个元素被称为 "remove"

javascript - 使用递归函数转换json

mysql - 是否有更有效的方法根据每个记录有多少关联来对数组进行排序?

ruby-on-rails - 为什么 declarative_authorization 会破坏我的 Controller 的功能? - rails 3

java - 处理 JSON 更改信息的最佳方式

javascript - 如何通过 Jquery 访问正确的标签