无法在Rails 4中使用Transloadit上传照片

时间:2014-07-21 21:18:28

标签: ruby-on-rails file-upload ruby-on-rails-4 transloadit

我按照Transloadit Rails GitHub page上的教程进行了操作,但无法在不收到提醒的情况下提交表单:Could not find input[name=params] in your form。点击"确定"后,Transloadit会快速抛出INVALID_FORM_DATA: bad form data, cannot parse,数据永远不会到达我的服务器。

我的应用正在使用Rails 4.1.4jquery-rails 2.1.4

这是我的表格:

= form_for @profile, url: community_add_photo_path(@profile), html: {id: 'photo_form'} do |f|
  = render 'shared/error_messages', object: f.object
  = transloadit :profile_photo
  = hidden_field_tag 'transloadit_template', 'profile_photo'

  %table.list
    %tr
      %td.faded.label Photo Filename
      %td= f.file_field :photo, required: true
    %tr
      %td
      %td= f.submit 'Upload'

= transloadit_jquerify :photo_form, wait: true

我的transloadit.yml文件:

development:
  jquery_sdk_version: 'latest'
  auth:
    key:      'key'
    secret:   'secret'
    duration: 1800 # 30 minute validity period for signed upload forms

  templates:
    profile_photo:
      steps:
        resize:
          height: 256
          resize_strategy: 'fillcrop'
          robot: '/image/resize'
          width: 256
        store:
          bucket: 'bucket-name'
          key: 'key'
          path: 'temp/${assembly.id}/${file.name}'
          robot: '/s3/store'
          secret: 'secret'

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

我假设你在控制器中有params解码器。这就是我所拥有的并且它有效,但现在将使用jquery,因为我无法控制最新情况。

        = bootstrap_form_for apr, :remote=> true,   html: { :id => "showapr#{apr.id}" , "data-type" => :json,    class: 'form-horizontal' } do |f|
            = hidden_field_tag :eventid, apr.event.id
            = transloadit :video_encode
            .fileupload.fileupload-new.pull-left{"data-provides" => "fileupload", style: "padding-right: 5px;"}  
                .fileupload-preview.thumbnail{:style => "width: 140px; height: 140px;"}
                    - if apr.upload.present?
                        - if apr.upload["thumbs"].present?
                            %img{ :src => apr.upload["thumbs"][0], :style => "width: 140px;height: 140px;"}
                    -else
                        %img{"data-src" => "holder.js/140x140/text:Lorem ipsum/social", :src => "", :style => "width: 140px;height: 140px;"}/
                - if apr.event.app.check_user_failed == false &&  (apr.event.start_time.day == Time.zone.now.day)
                    %div
                        %span.btn.btn-default.btn-file
                            %span.fileupload-new Select image
                            =f.file_field "upload#{apr.id}" , accept: 'video/flv,video/avi,video/mov,video/mp4,video/mpg,video/wmv,video/3gp,video/asf,video/rm,video/swf',  :data => {:max_file_size => 30.megabytes}
                    = transloadit_jquerify "showapr#{apr.id}", :wait => true, :modal=>true,  :triggerUploadOnFileSelection=> true 

答案 1 :(得分:0)

问题是您实际上没有将正确的表单数据发布到API,以便它可以正确解析。

https://transloadit.com/docs/api-docs#status-codes

给你:NO_PARAMS_FIELD没有给出params字段。

因为你没有将params字段传递给你使用transloadit的jquery方法时使用的API,所以非常有意义

params: {
 "startdate":"2014-12-02", 
 "endate":"2014-12-03",
 "auth":{ 
   "expires": "2014/12/27 16:53:14+00:00", 
   "key": "yourKeyValue"
  }
}
&signature=yourUniqueSignature

因此,如何创建参数以发送到API以使transloadit工作,这是错误的。