




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前天项目中需要用到一个图片上传的功能,本来以为就是一个简单的对文件对象的一个流操作,非常简单。但着手开始写的时候才发现,以前了解的文件的上传和下载是基于Servlet实现对流文件的操作,本次项目中的控制器使用的Struts2,难道让允许在众多Action中夹杂上Servlet?即使我能做到这也不符合项目规约,记得以前在学习Struts2的时候提到过Struts2的几个核心jar包中就包括文件上传下载的jar包,但是从来没有用过。第一直觉就是去查Struts2的官方文档,但找了半天没有找到Struts2的AIP,网上大多数都Struts2的API就是将Struts2的官方文档转换成了chm格式。知道了Struts2有个文件上传下载的包,没用过,本来很简单的东西瞬间又变成的很复杂的东西。又开始了在网上的寻找。不过功夫还是不负有心人,看了N多资料后。有了点自己小小的总结。Struts2提供的文件上传下载确实呗简单。就以图片上除为例子:核心代码就 3 句,其他全是围绕这3句核心代码写的,还有相应的geter和seterJava代码1. /1、得到图片将要写入的路径2. StringrealPath=ServletActionContext.getServletContext().getRealPath(/images);/实际路径也就是在tomcat的webapp下的路径3. 如果使用String path= ServletActionContext.getServletContext().getContextPath();得到的就是你项目下的路径了。不过还是推荐使用上一个Java代码1. /2、创建一个在此路径下的文件2. FilesaveFile=newFile(newFile(realPath),fileTestFileName);/在该实际路径下实例化一个文件Java代码1. /3、将上传文件复制到以上实例化的文件中,这部可能会抛出异常需要捕获2. FileUtils.copyFile(fileTest,saveFile);Java代码1. packagecom.ibm.action;2. 3. importjava.io.File;4. importjava.io.IOException;5. 6. mons.io.FileUtils;7. importorg.apache.struts2.ServletActionContext;8. 9. importcom.opensymphony.xwork2.ActionSupport;10. 11. publicclassUploadextendsActionSupport12. privateFilefileTest;/接收这个上传的文件13. privateStringfileTestFileName;/Struts2提供的格式,在文件名后+FileName就是上传文件的名字此处千万别再execute里面使用fileTest.getName();这个方法获取的名字是Struts2帮你封装好之后的一个文件名,一个tmp文件的文件名。14. publicFilegetFileTest()15. returnfileTest;16. 17. publicvoidsetFileTest(FilefileTest)18. this.fileTest=fileTest;19. 20. publicStringgetFileTestFileName()21. returnfileTestFileName;22. 23. publicvoidsetFileTestFileName(StringfileTestFileName)24. this.fileTestFileName=fileTestFileName;25. 26. 27. Override28. publicStringexecute()throwsException29. Stringstr=.jpg,.jpeg,.bmp,.gif;30. /限定文件大小是4MB31. if(fileTest=null|fileTest.length()4194304)32. returnimageError;33. 34. for(Strings:str)35. if(fileTestFileName.endsWith(s)36. StringrealPath=ServletActionContext.getServletContext().getRealPath(/images);/实际路径37. FilesaveFile=newFile(newFile(realPath),fileTestFileName);/在该实际路径下实例化一个文件38. /判断父目录是否存在39. if(!saveFile.getParentFile().exists()40. saveFile.getParentFile().mkdirs();41. 42. try43. /执行文件上传44. /FileUtils类名mons.io.FileUtils;45. /是commons-io包中的,commons-fileupload必须依赖commons-io包实现文件上次,实际上就是将一个文件转换成流文件进行读写46. FileUtils.copyFile(fileTest,saveFile);47. 48. catch(IOExceptione)49. returnimageError;50. 51. 52. 53. returnimageSuccess;54. 55. 56. ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值日志错误信息:2012-02-21 15:42:11,928 DEBUG org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator - 2012-02-21 15:42:11,928 DEBUG org.springframework.jdbc.support.SQLStateSQLExceptionTranslator - 2012-02-21 15:42:11,945 INFO com.weihua.core.exception.ExceptionMappingInterceptor - org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL ; SQL state 72000; error code 1461;- The error occurred in ibatis/SqlMap/sql-System.xml.- The error occurred while applying a parameter map.- Check the .insert-InlineParameterMap.- Check the statement (update failed).- Cause: java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值; nested exception is mon.jdbc.exception.NestedSQLException:- The error occurred in ibatis/SqlMap/sql-System.xml.- The error occurred while applying a parameter map.- Check the .insert-InlineParameterMap.- Check the statement (update failed).- Cause: java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值初步怀疑是插入的值大于该字段数据类型约束的长度导致。因为这个异常是指用户向数据库执行插入数据操作时,某条数据的某个字段值过长,如果是varchar2类型(最大长度为4000字节)的,当长度超过2000-4000(最大值)之间的时候,oracle会自动将该字段值转为long型的,插入操作失败。解决办法是:将此字段的类型改为clob或者blob类型;但是将oracle数据库表中的varchar2类型直接改成clob类型会失败,解决办法如下:new 一个Sql view,执行下列代码:alter table table_name modify col_name long;alter table table_name modify col_name clob;在进行此操作之前需要先备份表的数据,然后清空表中的数据,再修改表的字段属性,最后将数据导入即可。注:clob不需指定长度。1、插入到字符串长度大于4000字节。2、插入到表中的记录其中一个是long类型、还有其他实际长度大于2000个字节(如果是 UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串 。用以下SQL可以查出有可能引起ORA-01461错误的表:SELECT * FROM(SELECT TABLE_NAME, OWNER, count(*) NUMFROM DBA_TAB_COLUMNSWHERE DATA_TYPE=LONGOR ( DATA_TYPE=VARCHAR2or DATA_TYPE=CHARor DATA_TYPE=NVARCHAR2or DATA_TYPE=NCHAR)AND DATA_LENGTH 1333)AND OWNER NOT IN(SYS,SYSTEM,SH,OLAPSYS,MDSYS,WKSYS,ORDSYS,CTXSYS,ODM,XDB,WMSYS,APEX_030200,EXFSYS,SYSMAN,ORDDATA)GROUP BY TABLE_NAME, OWNER)WHERE NUM 1;关于错误的其他原因:当向ORACLE数据库中插入或更新数据时,报错“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”,可能有以下几种原因:1、插入到字符串长度大于4000字节。2、插入到表中的记录的某个字段数据的实际长度大于2000个字节(如果是UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串。3、数据库与客户端的JDBC 驱动不匹配。对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房地产分割调解协议
- 2025年合作伙伴利益共享协议样本
- 2025年联合股权处置协议样本
- 2025年长途通话服务代理合作协议
- 2025年合作策划房地产项目公司联合协议书样本
- 2025年建筑工程保密协议标准
- 基于大数据的房屋管理决策支持系统研究
- 国企科技创新能力提升的路径
- 优化营商环境推动开放型经济发展
- 2025年学校实验室危险化学品使用与管理规定
- 家装公司工程保修单
- 典当行规章制度合集
- 南方少数民族传统合唱精讲智慧树知到答案章节测试2023年四川音乐学院
- 自贸试验区片区重点发展产业列表
- 外贸英语函电全套(优选9篇)
- 中国银行个人授信业务催收外包服务方案及措施
- 立方米卧式浓硫酸储罐设计
- YS/T 22-2010锑酸钠
- GB/T 30828-2014预应力混凝土用中强度钢丝
- 井下作业修井防喷演习手动双闸板防喷器课件
- 《月光下的中国》朗诵稿
评论
0/150
提交评论