我正在尝试使用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文档中,有一件事我不能完全理解,那就是确保你在加载CarrierWave之后加载的是ORM。我不完全理解这是什么意思。
我的控制器:
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在create操作中,除了实际的文件上传之外,其余的数据都是我手动设置的,用于调试。
这一切似乎都可以正常工作,没有任何错误。
以下是发布的数据:
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 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的问题,但我想我已经解决了这个问题,为了调试的目的,我跳过了在create操作中检查真实性令牌。我已经将upload文件夹的安全权限更改为全局读/写。我在github Carrierwave文档中遇到的另一个混淆是以下代码:
u.avatar = File.open('somewhere')这是必需的吗?如果是这样的话,它为什么会这样,又会做什么呢?
我们将非常感谢您的帮助。谢谢!
发布于 2012-06-01 11:06:36
想明白了!上传的文件将放在/public/uploads中。这可能是一个菜鸟错误,但如果文档中能更好地解释这一点,那就更好了。
https://stackoverflow.com/questions/10837869
复制相似问题