java中文件上传报如下错误,是什么原因?

java中文件上传报如下错误,是什么原因?,第1张

然后在百度和谷歌上各种搜索,大多数认为是超时而断开连接。对于解决办法一般给的不够全面,现综合给出如下:

(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是判断条件,即读取到得内容不为空时,将它写入到输出流中。...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11801501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存