首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 3、Uploadify和Carierwave

Rails 3、Uploadify和Carierwave
EN

Stack Overflow用户
提问于 2012-06-01 00:49:47
回答 1查看 671关注 0票数 1

我正在尝试使用Carrierwave在服务器端和Uploadify在客户端实现一个上传器。从客户端看,似乎一切正常,而在服务器上,记录保存在数据库中,但物理上传的文件永远不会保存到文件系统中。请记住,我是Rails的新手。

这是我的上传工具:

代码语言:javascript
运行
复制
class ShapefileUploader < CarrierWave::Uploader::Base

  storage :file

  # simple path for debugging
  def store_dir
    "uploads" 
  end

end

我的模型:

代码语言:javascript
运行
复制
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。我不完全理解这是什么意思。

我的控制器:

代码语言:javascript
运行
复制
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操作中,除了实际的文件上传之外,其余的数据都是我手动设置的,用于调试。

这一切似乎都可以正常工作,没有任何错误。

以下是发布的数据:

代码语言:javascript
运行
复制
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插入:

代码语言:javascript
运行
复制
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文档中遇到的另一个混淆是以下代码:

代码语言:javascript
运行
复制
u.avatar = File.open('somewhere')

这是必需的吗?如果是这样的话,它为什么会这样,又会做什么呢?

我们将非常感谢您的帮助。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-01 11:06:36

想明白了!上传的文件将放在/public/uploads中。这可能是一个菜鸟错误,但如果文档中能更好地解释这一点,那就更好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10837869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档