浏览 6000 次
锁定老帖子 主题:请教rails 上传文件,文件名乱码的问题
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-29
在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下做的 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-29
我想用url_encode()转换下文件名,可是告诉我undefined method `url_encode' for #<TestController:0x493b10c>
url_encode需要安装什么库吗? |
|
返回顶楼 | |
发表时间:2007-03-29
我今天也遇到同样的问题,正苦恼这呢。不知道robbin是如何解决的.应该是File.open或者File.new的编码问题。
传输过程都是正确的编码,只是在调用File.open是,说找不到文件。 哪位朋友知道怎么解决吗?万分感谢!! |
|
返回顶楼 | |
发表时间:2007-03-30
我也碰到这个问题。
我保存文件的时候把文件名转换成英文或数字就可以成功写入。在数据库里保存这个文件名。 |
|
返回顶楼 | |
发表时间:2007-03-30
看来只能将文件名作md5处理,然后需要下载的时候再转换成md5值下载。
不知道这样可行吗 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2007-04-18
确实有用,感谢
我试验了下,用utf8也可以 def set_charset @headers["Content-Type"]="text/html;charset=utf8" end |
|
返回顶楼 | |