Chinaunix
标题:
jspsmartupload上传相片到MySQL数据库问题
[打印本页]
作者:
shao_sml
时间:
2009-06-23 11:42
标题:
jspsmartupload上传相片到MySQL数据库问题
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
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2