去年项目里的jspsmartupload出了问题了,内存溢出。找了好长时间bug都没有找到。最后发现是上传没有遵守rfc协议造成的。不过这个bug相对来说还是比较危险的。我们不能保证用户一定遵守这个协议,所以做了如下修改。。
SmartUpload.java
private void getDataSection() {
boolean flag = false;
String s = new String();
int i = m_currentIndex;
int j = 0;
int k = m_boundary.length();
m_startData = m_currentIndex;
m_endData = 0;
while (i < m_totalBytes)
if (m_binArray[i] == (byte) m_boundary.charAt(j)) {
if (j == k - 1) {
m_endData = ((i - k) + 1) - 3;
break;
}
i++;
j++;
} else {
i++;
j = 0;
}
m_currentIndex = m_endData + k + 3;
}
改为
private void getDataSection() {
boolean flag = false;
String s = new String();
int i = m_currentIndex;
int j = 0;
int k = m_boundary.length();
m_startData = m_currentIndex;
m_endData = m_totalBytes - k - 5;
while (i < m_totalBytes)
if (m_binArray[i] == (byte) m_boundary.charAt(j)) {
if (j == k - 1) {
m_endData = ((i - k) + 1) - 3;
break;
}
i++;
j++;
} else {
i++;
j = 0;
}
m_currentIndex = m_endData + k + 3;
}
jspsmartupload 效率不高,代码比较乱。如果是新选择的话还是选择apache的组件吧。曾经还遇到过这样的问题
当页面form提交的时候不加二进制的时候读取失败。。