1

サーバーで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のドキュメントから私が完全に理解していないことの1つは、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のドキュメントで遭遇したもう1つの混乱は、次のコードです。

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

これは必要ですか?もしそうなら、なぜそしてそれは何をしますか?

助けていただければ幸いです。ありがとう!

4

1 に答える 1

1

理解した!アップロードされたファイルは/public/uploadsに配置されます。ルーキーの間違いの可能性がありますが、これがドキュメントでより適切に説明されていると便利です。

于 2012-06-01T03:06:36.413 に答える