(1)首先,上传页面上面的 form 标签要设enctype="multipart/form-data" 参数
(2)修改tomcat配置文件server.xml,找到类似于下面配置:
<Connector port="8086" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
将上面的参数disableUploadTimeout值改为false即可。
(3)上边(1)是我的程序中已经设置的,修改了(2)所述的配置后依然不能运行,后来又修改了tomcat配置文件server.xml中的另外一处:
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />也在里边加入了disableUploadTimeout="false"一句。
用了以上方法仍然不能解决,后来想到可能是服务器外加了防火墙或者限制了上传文件的大小之类的,联系网络中心进行相关设置进行设置即可
client中的out.flush()有问题。不能再循环内out.flush,它会向Server将你的OutputStream发送过去,然后你的服务器取读了一句话就写入了一句话关闭了。下一个循环你再向服务器推送数据就会发现连接关闭了。不知道正不正确。
关于使用Socket的flush过去无法readLine得到的问题原因是这样的:
flush方法只是将字符刷新过去。
readLine方法读取一行数据,注意:一行数据是以\r\n作为终止条件的。
flush过去的数据一般是没有换行符的,所以就无法读取。
为什么有时候我们flush过去的却能够得到呢?有些时候,我们flush之后就没有代码了,然后代码执行完自动将流close调,所以给它加上了换行符过去,所以readLine可以读取到。
close方法也会刷新缓存流,并且会在数据结尾加上换行符。
这个很关键!
你可以尝试在flush之前使用BufferedWriter的newLine()方法,这样你会发现flush刷新过去的在服务器端是可以读取到的,不一定需要shutdownInputStream或者shutDownOutputStream。
newLine
public void newLine()
throws IOException
写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符。
抛出:
IOException - 如果发生 I/O 错误
close
public abstract void close()
throws IOException
关闭此流,但要先刷新它。在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。关闭以前关闭的流无效。
指定者:
接口 Closeable 中的 close
抛出:
IOException - 如果发生 I/O 错误
flush
public void flush()
throws IOException
刷新该流的缓冲。
指定者:
接口 Flushable 中的 flush
指定者:
类 Writer 中的 flush
抛出:
IOException - 如果发生 I/O 错误
readLine
public String readLine()
throws IOException
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
把图片用字节流的形式上传,定义了一个字节数组,目的是将图片存储在里面 while(is.read(b)!=-1){ fos.write(b)} 的作用是循环读取,is.read(b)!=-1是判断条件,即读取到得内容不为空时,将它写入到输出流中。...欢迎分享,转载请注明来源:内存溢出
评论列表(0条)