ibatis mysql 文件上传下载

1 篇文章 0 订阅
0 篇文章 0 订阅

         无聊写了一个file的上传. 大致流程为从本地上传到服务器 然后从服务器放到mysql数据库中 一个类型为blob的CONTENT字段,在删除服务器file文件。最后还有从数据库读取。

        中间发生了一些错误 上网找了一些资料,大概流程和主要代码如下:

FileBean:

public class FileBean {
<span style="white-space:pre">	</span>private String ID;
<span style="white-space:pre">	</span>private String TYPE;
<span style="white-space:pre">	</span>private String CID;
<span style="white-space:pre">	</span>private String NAME;
<span style="white-space:pre">	</span>private byte[] CONTENT;

<span style="white-space:pre">	</span>public String getID() {
<span style="white-space:pre">		</span>return ID;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setID(String iD) {
<span style="white-space:pre">		</span>ID = iD;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public String getTYPE() {
<span style="white-space:pre">		</span>return TYPE;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setTYPE(String tYPE) {
<span style="white-space:pre">		</span>TYPE = tYPE;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public String getCID() {
<span style="white-space:pre">		</span>return CID;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setCID(String cID) {
<span style="white-space:pre">		</span>CID = cID;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public String getNAME() {
<span style="white-space:pre">		</span>return NAME;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setNAME(String nAME) {
<span style="white-space:pre">		</span>NAME = nAME;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public byte[] getCONTENT() {
<span style="white-space:pre">		</span>return CONTENT;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public void setCONTENT(byte[] cONTENT) {
<span style="white-space:pre">		</span>CONTENT = cONTENT;
<span style="white-space:pre">	</span>}
}
FileService  这是从服务器上获取文件 然后添加到

<span style="white-space:pre">	</span>String uploadPath = request.getSession().getServletContext().getRealPath("/upload/"+file_name);  //文件名
<span style="white-space:pre">	</span>File file = new File(uploadPath);
<span style="white-space:pre">	</span>InputStream intInputStream = new FileInputStream(file);
<span style="white-space:pre">	</span>byte[] buf = new byte[intInputStream.available()];
<span style="white-space:pre">	</span>intInputStream.read(buf);
<span style="white-space:pre">	</span>bean.setCONTENT(buf);
<span style="white-space:pre">	</span>bean.setNAME(file_name);
<span style="white-space:pre">	</span>bean.setCID(id);
<span style="white-space:pre">	</span>bean.setTYPE(type);
<span style="white-space:pre">	</span>super.insert("File.add", bean); //插入数据库中
<span style="white-space:pre">	</span>intInputStream.close();
<span style="white-space:pre">	</span>file.delete();  //删除本地文件
FileXml:

<resultMap id="blobResult" class="FileBean">
  <span style="white-space:pre">	</span><result property="NAME" column="NAME"/>
   <span style="white-space:pre">	</span><result property="CONTENT" column="CONTENT"/>
</resultMap>
<insert id="add" parameterClass="FileBean">
	insert into sys_file (type,cid,name,content) VALUES (#TYPE#,#CID#,#NAME#,#CONTENT:BLOB#)
</insert>
<select id="getFileList" parameterClass="FileBean" resultMap="blobResult">
 <span style="white-space:pre">	</span>SELECT NAME,CONTENT FROM SYS_FILE WHERE CID = '$CID$' AND TYPE = '$TYPE$'
</select>

 这是插入的大致代码,成功的插入了数据库。可是在读取的时候。读取blob字段 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: [B cannot be cast to java.sql.Blob
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	com.sell.base.filter.UserInfoFilter.doFilter(UserInfoFilter.java:45)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

出错了。。。 类型不匹配。试了几种方法

1. 更改xml里面resultMap CONTENT  

<result property="CONTENT" column="CONTENT" jdbcType="BLOB" typeHandler="org.springframework.orm.ibatis.support.ClobStringTypeHandler">
结果无效。。

2.去掉typeHandler 在bean里更改 CONTENT类型 为Object 然后再service 直接 Blob blob = (Blob)bean.getContent(); 强转。 再次报错。。

3.加上了javaType

<result property="CONTENT" column="CONTENT" jdbcType="BLOB" javaType = "java.lang.String" />
service用string 接收。  成功了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值