免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1466 | 回复: 0
打印 上一主题 下一主题

jspsmartupload上传相片到MySQL数据库问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-23 11:42 |只看该作者 |倒序浏览
jspsmartupload上传相片到MySQL数据库问题
    在jspsmartupload的示例中,第四个示例是把文件上传到MySQL数据库的tfiles表的FILE字段中.但发现不成功,试着上传一个图片文件,发现图片的最后部分没上传(少了一截).
追踪过程:
1.sample4.jsp中,调用fileToField()方法进行文件上传到数据库中:
    mySmartUpload.getFiles().getFile(0).fileToField(rs,"FILE");
2.分析fileToField()方法:
public void fileToField(ResultSet rs, String columnName)
    throws SQLException, com.jspsmart.upload.SmartUploadException, IOException, ServletException
  {
    long numBlocks = -7962811221516746752L;
    int blockSize = 65536;//块大小
    int leftOver = 0;//剩余的部分
    int pos = 0;
    if (rs == null) throw new IllegalArgumentException("The RecordSet cannot be null (1145).");
    if (columnName == null) throw new IllegalArgumentException("The columnName cannot be null (1150).");
    if (columnName.length() == 0) { throw new IllegalArgumentException("The columnName cannot be empty (1155).");
    }
    numBlocks = BigInteger.valueOf(this.m_size).divide(BigInteger.valueOf(blockSize)).longValue(); //计算块数
    leftOver = BigInteger.valueOf(this.m_size).mod(BigInteger.valueOf(blockSize)).intValue();//计算剩余的部分(不够一块)
    try
    {
      for (int i = 1; i <numBlocks; ++i) {
        rs.updateBinaryStream(columnName, new ByteArrayInputStream(this.m_parent.m_binArray, pos, blockSize), blockSize);
        pos = (pos == 0) ? 1 : pos;
        pos = i * blockSize;
      }
      if (leftOver <= 0) return;
      rs.updateBinaryStream(columnName, new ByteArrayInputStream(this.m_parent.m_binArray, pos, leftOver), leftOver);
    }
    catch (SQLException e)
    {
      byte[] binByte2 = new byte[this.m_size];
      System.arraycopy(this.m_parent.m_binArray, this.m_startData, binByte2, 0, this.m_size);
      rs.updateBytes(columnName, binByte2);
    }
    catch (Exception e) {
      throw new com.jspsmart.upload.SmartUploadException("Unable to save file in the DataBase (1130).");
    }
  }
此程序是以分块的方式进行上传.
其中:
    for (int i = 1; i <numBlocks; ++i) {
        rs.updateBinaryStream(columnName, new ByteArrayInputStream(this.m_parent.m_binArray, pos, blockSize), blockSize);
        pos = (pos == 0) ? 1 : pos;
        pos = i * blockSize;
    }
    应该有错,改为:
    for (int i = 1; i <=numBlocks; ++i) {
        rs.updateBinaryStream(columnName, new ByteArrayInputStream(this.m_parent.m_binArray, pos, blockSize), blockSize);
    pos = i * blockSize;
        pos = (pos == 0) ? 0 : pos;   
    }
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/23460/showart_1974129.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP