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
當我嘗試,圖像的值只是包含假路徑名的字符串,所以我無法調用它original_filename – user1136342
你關心的行是:File.open(path,「wb」){ | F | f.write(upload ['datafile']。read)} - 文件路徑是不相關的,除非你想保留名字,在這種情況下,你需要路徑的最後一個標記,而不是整個路徑。 – GoGoCarl
我遇到的問題是upload ['datafile']是一個包含文件路徑的字符串,所以我無法調用.original_filename或.read讀取它。當我在文件輸入DOM元素上使用jQuery和.val()時,我只能得到這個字符串,而不是一個對象 - 我應該得到一個對象? – Mastid