高分求解:java.lang.IllegalStateException: getOutputStream() has already been called for this response
我用此类下载文件,下载正常但在日志中报如下错误,请高手指教。
public void downloadFile(String s, String s1, String s2, int i)
throws SmartUploadException, IOException, ServletException
{
if(s == null)
throw new IllegalArgumentException(String.valueOf((new StringBuffer("File '")).append(s).append("' not found (1040).")));
if(s.equals(""))
throw new IllegalArgumentException(String.valueOf((new StringBuffer("File '")).append(s).append("' not found (1040).")));
if(!isVirtual(s) && m_denyPhysicalPath)
throw new SecurityException("Physical path is denied (1035).");
if(isVirtual(s))
s = m_application.getRealPath(s);
java.io.File file = new java.io.File(s);
java.io.FileInputStream fileinputstream = new java.io.FileInputStream(file);
long l = file.length();
boolean flag = false;
int j = 0;
byte abyte0[] = new byte[i];
if(s1 == null)
m_response.setContentType("application/x-msdownload");
else
if(s1.length() == 0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition = m_contentDisposition == null ? "attachment;" : m_contentDisposition;
if(s2 == null)
m_response.setHeader("Content-Disposition", String.valueOf((new StringBuffer(String.valueOf(m_contentDisposition))).append(" filename=").append(toUtf8String(getFileName(s)))));
//m_response.setHeader("Content-Disposition", (new StringBuilder()).append(m_contentDisposition).append(" filename=").append(toUtf8String(getFileName(s))).toString());
else
if(s2.length() == 0)
m_response.setHeader("Content-Disposition", m_contentDisposition);
else
m_response.setHeader("Content-Disposition", String.valueOf((new StringBuffer(String.valueOf(m_contentDisposition))).append(" filename=").append(toUtf8String(s2))));
//m_response.setHeader("Content-Disposition", (new StringBuilder()).append(m_contentDisposition).append(" filename=").append(toUtf8String(s2)).toString());
m_response.flushBuffer();
do
{
if((long)j >= l)
break;
int k = fileinputstream.read(abyte0, 0, i);
j += k;
m_response.getOutputStream().write(abyte0, 0, k);
if(getSize() <= 0x10000)
m_response.flushBuffer();
} while(true);
fileinputstream.close();
}