Rails 3,Uploadify和Carrierwave

时间:2012-05-31 16:49:47

标签: ruby-on-rails-3 uploadify carrierwave

我正在尝试使用服务器上的Carrierwave和客户端上的Uploadify来实现上传器。从客户端看起来它的全部工作和服务器上的记录保存在数据库中,但物理上传的文件永远不会保存到文件系统。请记住,我是Rails的新手。

这是我的上传者:

class ShapefileUploader < CarrierWave::Uploader::Base

  storage :file

  # simple path for debugging
  def store_dir
    "uploads" 
  end

end

我的模特:

class DataRecord < ActiveRecord::Base

  # not too sure if this belongs here at all, documentation is not too specific.
  require 'carrierwave/orm/activerecord'

  mount_uploader :shapefile, ShapefileUploader

end

我从Carrierwave文档中未完全理解的一件事是关于确保在加载ORM后加载CarrierWave的部分。我不完全明白它的含义。

我的控制器:

class DataRecordsController < ApplicationController
skip_before_filter :verify_authenticity_token, :only => [:update, :create]

  def index
   @folder = Folder.find(params[:folder_id])
   @data_types = DataType.all
  end 

  def create
    data_record = DataRecord.new({:shapefile => params[:Filedata], :folder_id =>    params[:folder_id], :user_file_name => params[:Filename], :data_type_id => 6})
    data_record.save!
  end

  def update

  end

end

在创建操作中,除了实际文件上传外,我手动设置的其余数据用于调试。

这一切似乎都没有任何错误。

以下是发布的数据:

Parameters: {"Filename"=>"id_rsa.pub", "Filedata"=>#<ActionDispatch::Http::UploadedFile:0x007fc67836eb88 @original_filename="id_rsa.pub",   @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"Filedata\"; filename=\"id_rsa.pub\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/tmp/RackMultipart20120531-4919-147n4qu>>, "Upload"=>"Submit Query",  "folder_id"=>"74"}

SQL INSERT:

INSERT INTO "data_records" ("data_type_id", "folder_id", "shapefile", "status", "uploaded_date_time", "user_file_name", "validated", "validation_results", "validation_to_send") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"  [["data_type_id", 6], ["folder_id", 74], ["shapefile", "id_rsa.pub"], ["status", 0], ["uploaded_date_time", nil], ["user_file_name", "id_rsa.pub"], ["validated", 0], ["validation_results", nil], ["validation_to_send", nil]]

我知道闪存删除cookie存在一些问题,但我认为我已经通过跳过检查创建操作上的真实性标记来解决此问题。我已将上传文件夹的安全权限更改为全局读/写。我在github Carrierwave文档中遇到的另一个困惑是以下代码:

u.avatar = File.open('somewhere')

这需要吗?如果是这样,为什么以及它做什么?

非常感谢帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

想出来!上传的文件将被放入/ public / uploads。可能是一个新手的错误,但如果在文档中对此有更好的解释,那将会很好。