新手问题 不使用插件上传图片

zhq_zhq · 2013年12月03日 · 最后由 dw250100785 回复于 2013年12月04日 · 3160 次阅读
class ApplicationController < ActionController::Base
  protect_from_forgery

  def uploadFile(file)
    require 'fileutils'
    file=params[:file]  
    if !file.original_filename.empty?  
      @filename=getFileName(file.original_filename)   
      File.open("#{File.expand_path(RAILS_ROOT)}/public/uploads/#{filename}", "wb") do |f|  
      f.write(file.read)  
    end  
      return @filename  
    end  
  end  

  def getFileName(filename)  
    if !filename.nil?  
      Time.now.strftime("%Y_%m_%d_%H_%M_%S") + '_' + filename  
    end  
  end  

  def save  
    unless request.get?  
      if filename=uploadFile(params[:file]['file'])  
        render :text=>filename  
      end  
    end  
  end   
end


  def create
    @photo = Photo.new(params[:photo])
    @photo.img_url=uploadFile(params[:img_url])
    @photo.save
    flash[:notice]="新建成功"
    redirect_to photos_url()
  end

报错 undefined method `original_filename' for nil:NilClass

undefined method "xxxx" for nil:NilClass 这类错误就是你对一个为 nil 的对象调用方法,当然是出错了。这里你的uploadFile方法没有接收到file这个参数,检查一下表单,看看是否添加了multipart: true。关于文件上传,可以参考官方文档 http://guides.rubyonrails.org/form_helpers.html#uploading-files。另外注意提问时的格式。

检查 imagemagick这个库是否安装。/

应该是没有加 multipart

@xieyu33333 ,@hlcfan,@small_fish__谢谢你们是我的地址写错了

@hlcfan class ApplicationController < ActionController::Base protect_from_forgery

def uploadFile(file) require 'fileutils' if !file.original_filename.empty?
@filename=getFileName(file.original_filename)
File.open("#{File.expand_path(Rails.root)}/public/uploads/#{filename}", "wb") do |f|
f.write(file.read)
end
return @filename
end
end

def getFileName(filename)
if !filename.nil?
Time.now.strftime("%Y_%m_%d_%H_%M_%S") + '_' + filename
end
end

def save
unless request.get?
if filename=uploadFile(params[:file])
render :text=>filename
end
end
end
end this is ok! thanks everybody!

新手表示学习了,mark

需要 登录 后方可回复, 如果你还没有账号请 注册新账号