2013-07-02 104 views
0

我想用Rails,Mongoid和Carrierwave上傳文件。當我點擊提交時,POST請求中的「image」的值是{url : null}。當我使用記錄器從控制器中的創建操作中查看「image」的值時,值爲"C:\\fakepath\\tree.png",因此我不能直接使用File.open將其保存以獲取文件,因爲這不是真正的路徑。這是我第一次用上傳器寫一個表格,所以我不確定我在做什麼。用carrierwave上傳文件

這是我上傳的圖像格式:

<h1>New Post</h1> 
<form id="new-post" name="post" enctype="multipart/form-data"> 
    <div class="field"> 
    <label for="name"> Name</label><br /> 
    <input type="text" name="name" id="name" value="<%= name %>" > 
    </div> 
    <div class="field"> 
    <label for="image"> Image</label><br /> 
    <input type="file" name="image" id="image" value="<%= image %>" > 
    </div> 
    <div class="field"> 
    <label for="content"> Content</label><br /> 
    <textarea rows="4" cols="50" name="content" id="content" value="<%= content %>" ></textarea> 
    </div> 
    <div class="actions"> 
    <input type="submit" value="Create Post" /> 
    </div> 
</form> 

這是我添加了什麼支持carrierwave:

的Gemfile:

gem "carrierwave" 
gem "carrierwave-mongoid", :require => 'carrierwave/mongoid' 

PostModel:

attr_accessible :name, :content, :image 
mount_uploader :image, ImageUploader 

的Imag eUploader:

class ImageUploader < CarrierWave::Uploader::Base 
    storage :file 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

回答

0

試試這個指南,讓您開始: http://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm

的fakepath事情是好的,你真的不關心路徑本身,您擔心這是上載的字節數據。

+0

當我嘗試,圖像的值只是包含假路徑名的字符串,所以我無法調用它original_filename – user1136342

+0

你關心的行是:File.open(path,「wb」){ | F | f.write(upload ['datafile']。read)} - 文件路徑是不相關的,除非你想保留名字,在這種情況下,你需要路徑的最後一個標記,而不是整個路徑。 – GoGoCarl

+0

我遇到的問題是upload ['datafile']是一個包含文件路徑的字符串,所以我無法調用.original_filename或.read讀取它。當我在文件輸入DOM元素上使用jQuery和.val()時,我只能得到這個字符串,而不是一個對象 - 我應該得到一個對象? – Mastid