论坛首页 编程语言技术论坛

请教rails 上传文件,文件名乱码的问题

浏览 6001 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-29  
我用rails上传文件
在ApplicationController < ActionController::Base里
def uploadFile(file)    
     if !file.original_filename.empty?  
       #生成一个随机的文件名      
       @filename=getFileName(file.original_filename)         
       #向dir目录写入文件  
       File.open("#{RAILS_ROOT}/public/images/#{@filename}", "wb") do |f|   
          f.write(file.read)  
       end   
       #返回文件名称,保存到数据库中  
       return @filename 
     end  
  end   
 
  def getFileName(filename)  
     if !filename.nil?  
       return filename
     end  
  end      
然后在TestController < ApplicationController里
def save
    unless request.get?
    if filename=uploadFile(params[:file]['file'])
      render :text=>filename
    end   
    end
end
文件可以正确上传到public/images下
但是中文文件名变为了乱码,但是render :text=>filename返回的名字,并不是乱码.
是不是在File.open的时候,还要对文件名进行转码?

希望指点一下,我看了论坛,有人说用iconv库,但是我在render:text=>filename并不是乱码,应该不用对上传的文件名进行编码了,感觉就是在File.open的时候,文件名不能正确的被操作系统识别.
我用的是radrails在windowxp下做的
   发表时间:2007-03-29  
我想用url_encode()转换下文件名,可是告诉我undefined method `url_encode' for #<TestController:0x493b10c>
url_encode需要安装什么库吗?
0 请登录后投票
   发表时间:2007-03-29  
我今天也遇到同样的问题,正苦恼这呢。不知道robbin是如何解决的.应该是File.open或者File.new的编码问题。
传输过程都是正确的编码,只是在调用File.open是,说找不到文件。

哪位朋友知道怎么解决吗?万分感谢!!
0 请登录后投票
   发表时间:2007-03-30  
我也碰到这个问题。

我保存文件的时候把文件名转换成英文或数字就可以成功写入。在数据库里保存这个文件名。
0 请登录后投票
   发表时间:2007-03-30  
看来只能将文件名作md5处理,然后需要下载的时候再转换成md5值下载。
不知道这样可行吗
0 请登录后投票
   发表时间:2007-04-16  
在ApplicationController加上:
before_filter:set_charset  
def set_charset  
  @headers["Content-Type"]="text/html;charset=gb2312" 
end
就可以解决乱码了哈。而且我还遇到了一个怪事,大家有兴趣可以试下:http://msdn.iteye.com/blog/71558
0 请登录后投票
   发表时间:2007-04-18  
确实有用,感谢
我试验了下,用utf8也可以
def set_charset
@headers["Content-Type"]="text/html;charset=utf8"
end
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics