仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 493|回复: 8
打印 上一主题 下一主题

[学习教程] 来看Rails文件上传file_field报错Encoding::UndefinedConversionError

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:01:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。
服务器用的是ubuntu1264bit,情况是ruby1.9.3+rails3+mysql,测试是在windows2003上。
上传一个【.gitconfig】文件,没有成绩,上传【新浪微博数据发掘.pdf】报错,上传【back.jpg】报错。
下面是两段信息,是从【log/production.log】中粘贴出来的。下面一段你是没有成绩的日记,上面一段是报错以后的日记。
01.StartedPOST"/posts"for106.3.102.43at2012-10-2921:16:26+0800
02.ProcessingbyPostsController#createasHTML
03.Parameters:{"utf8"=>"?","authenticity_token"=>"QG8aU6/VW5ZMagzyGhjdbm7fSzr4MB5CKdJeGBIeOa4=","post"=>{"category_id"=>"1","title"=>"666666666666","url"=>"6666666","picture"=>#<ActionDispatch::Http::UploadedFile:0x000000032fb838@original_filename=".gitconfig",@content_type="application/octet-stream",@headers="Content-Disposition:form-data;name="post[picture]";filename=".gitconfig"
Content-Type:application/octet-stream
",@tempfile=#<File:/tmp/RackMultipart20121029-2609-1lrmc9o>>,"content"=>"6666","tags_attributes"=>{"0"=>{"title"=>""}}},"commit"=>"CreatePost"}
04.Redirectedtohttp://42.121.5.68/posts
05.Completed302Foundin36ms(ActiveRecord:30.1ms)
01.StartedPOST"/posts"for123.114.36.100at2012-10-3008:58:13+0800
02.ProcessingbyPostsController#createasHTML
03.Parameters:{"utf8"=>"?","authenticity_token"=>"rRnhcDWYDn+OntxxC2LmIEHpSpjWI5glrs6JlprG1Ho=","post"=>{"category_id"=>"1","title"=>"博客实验最新宝贝","url"=>"post7","picture"=>#<ActionDispatch::Http::UploadedFile:0x000000030df9a0@original_filename="新浪微博数据发掘计划.pdf",@content_type="binary/octet-stream",@headers="Content-Disposition:form-data;name="post[picture]";filename="xE6x96xB0xE6xB5xAAxE5xBExAExE5x8Dx9AxE6x95xB0xE6x8DxAExE6x8Cx96xE6x8Ex98xE6x96xB9xE6xA1x88.pdf"
Content-Type:binary/octet-stream
",@tempfile=#<File:/tmp/RackMultipart20121030-16129-15agvlb>>,"content"=>"博客尝>试最新宝贝","tags_attributes"=>{"0"=>{"title"=>"博客实验最新宝贝"}}},"commit"=>"CreatePost"}
04.Completed500InternalServerErrorin45ms
05.
06.Encoding::UndefinedConversionError("xE2"fromASCII-8BITtoUTF-8):
07.app/controllers/posts_controller.rb:60:in`write
08.app/controllers/posts_controller.rb:60:in`block(2levels)increate
09.app/controllers/posts_controller.rb:59:in`open
10.app/controllers/posts_controller.rb:59:in`blockincreate
11.app/controllers/posts_controller.rb:56:in`create
对照以后,发明两段的picture部分的@content_type纷歧样,乐成的是@content_type="application/octet-stream",失利的是@content_type="binary/octet-stream"。
实验上传一个txt文件,乐成了,@content_type部分是@content_type="text/plain"。
断定是这个部分的缘故原由,也就是编码,以是报错编码毛病,未界说编码转换。
上传部分的代码以下
  1. uploaded_io=params[:post][:picture]
  2. ifuploaded_io!=nilanduploaded_io.content_type.match(image)
  3. File.open(Rails.root.join(public,uploads,uploaded_io.original_filename),w)do
  4. |f|
  5. f.write(uploaded_io.read)
  6. end
  7. else
  8. end
复制代码
经由一番查找,找到了深层的缘故原由,本来是二进制文件的原因,ruby在读取和保留的时分会主动处置二进制文件,不必要特别的体例。
但是在windows中,二进制和文本文件是分歧的,在二进制mode下,停止行不克不及被本义为一个独自的换行,而是被保留为一个回车和一个换行。以是假如读取的是二进制文件,必要在open的时分要指明读取的是二进制文件wb。b就是二进制的意义。
图片默许依照二进制文件处理,以是就中招了。实在也只必要把w改成wb就能够了。
<p>
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。
小妖女 该用户已被删除
沙发
发表于 2015-1-20 12:47:30 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
因胸联盟 该用户已被删除
板凳
发表于 2015-1-29 07:09:56 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
若天明 该用户已被删除
地板
发表于 2015-2-1 07:48:47 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
乐观 该用户已被删除
5#
发表于 2015-2-7 01:40:02 | 只看该作者
是一种使用者不需花费很多时间学习的语言
透明 该用户已被删除
6#
发表于 2015-2-19 09:43:12 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
7#
发表于 2015-3-6 14:27:51 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
谁可相欹 该用户已被删除
8#
发表于 2015-3-13 02:08:22 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
爱飞 该用户已被删除
9#
发表于 2015-3-20 09:35:31 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 05:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表