定位flash上传出现IO Error #2038的错误

简介: 在使用flash上传文件时,当文件超过一定大小,会遇到错误:   如何遇到这个问题的: 去年曾经使用Extjs开发一个游戏运维集成系统,其中有一个功能是使用flash上传文件,例如excel、sql等,后台程序来处理上传的文件。

在使用flash上传文件时,当文件超过一定大小,会遇到错误:

image

flash upload

 

如何遇到这个问题的:

去年曾经使用Extjs开发一个游戏运维集成系统,其中有一个功能是使用flash上传文件,例如excel、sql等,后台程序来处理上传的文件。而这个flash上传工具是我之前写的,可是同事现在在系统中上传一个2M多的文件时,传到40%左右就提示出现io错误,让人查一下是否是flash有超时的情况。

看到这个问题我也觉得很奇怪,因为flash在选择文件的后就判定它的大小了,所以flash不存在文件过大或过小的情况。而flash向后台提交参数是否存在超时,我第一反应是不存在(除非http协议或是web服务器上面有超时限制);flash做的只是监听和回调

 

那问题出在哪里,最初我认识是后台服务器的问题,比如上传大小的设置限制等。因为后台使用java写的,本机不太好模拟环境,只能自己用php模拟后台来找到这个问题

 

为了保险起见,我用了两种方案:

1、普通的form提交

2、flash的post提交

 

最初试的时候,用fiddler抓到的是请求php得到http的504错误(GameWay timeout,奇怪了…)

然后去验证自己的想法,是否php里有设置文件大小的参数,找到php.ini,修改如下参数:

upload_max_filesize = 200M
post_max_size = 200M

(如果以上两项设定的值小于post提交文件大小,将得不到文件的相关信息,如temp_name、size等,但不会出现flash io error 2038,反复测试得到的结果)

当然还有其它参数需要修改,如:max_execution_time、max_input_time等.

详情请参考:php.ini修改php上传文件大小限制

 

即使是我修改memory_limit=-1,修改所有php参数依旧出现错误,然后继续搜索

在swfupload的官网论坛里找到这么一篇关于IO Error #2038

仔细阅读了下面的回复,看到有一条比较吸引人:

“Hello. I use nginx proxy and i see same error. I fixed in my site and now working fine.”

为何如此吸引我,因为我本机的web服务器也使用的也是nginx

读完以后,就先试试了,调参数,它上面的三个参数我都改了:

#keepalive_timeout  60;
#send_timeout 3m;
client_max_body_size 500m;

注释前面两个,修改最后一项为500m,默认大小好像是1m

 

它给出的示例配置如下:

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
sendfile on;
client_max_body_size 500m;
tcp_nodelay on;
gzip on;
server {
listen 80;
server_name domain.hu www.domain.hu;
access_log off;
location / {
proxy_pass http://xxxxxxxxxx:80/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
}

关闭nginx应用程序,再重启它,刷新、测试,居然好了…

 

好了以后,再反向推导产生问题的原因,先还原所有参数,再一个一个试,最终找到关键点:client_max_body_size这个参数

如果设置的大小过小,则会出现413 Request Entity Too Large错误(之前是504,这也让我很奇怪,前面没截到图---遗憾)

normal upload

 

image

 

确定是nginx的问题,然后回头又折腾php的几个参数,发现:如果upload_max_filesize或post_max_size的值比上传的文件要小,则将获取不到文件的相关信息,但不报错。

$_FILES["Filedata"]["error"] == 0;

print_r($_FILES);

image

 

至于换成Apache是否会遇到这个问题,我就不清楚了,没测试过~

目录
相关文章
|
运维 监控 Linux
iofsstat:帮你轻松定位 IO 突高,前因后果一目了然 | 龙蜥技术
磁盘被打满到底是真实的业务需求量上来了呢?还是有什么野进程在占用 IO? iofsstat 帮你精准定位。
iofsstat:帮你轻松定位 IO 突高,前因后果一目了然 | 龙蜥技术
|
6月前
|
存储 XML JSON
【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化
【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化
38 0
|
9月前
|
网络协议 C++ Docker
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
2775 0
|
网络协议 jenkins 持续交付
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker
557 0
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker
|
应用服务中间件 nginx
磁盘 IO error
文件系统首先要先挂载到某个目录才可以正常使用
|
Linux
vm安装centOS报错:anaconda: Fatal IO error 104
vm安装centOS报错:anaconda: Fatal IO error 104
261 0
vm安装centOS报错:anaconda: Fatal IO error 104
|
机器学习/深度学习 Web App开发 移动开发
pip安装时 fatal error C1083 无法打开包括文件 “io.h” No such file or directory
pip安装时 fatal error C1083 无法打开包括文件 “io.h” No such file or directory
474 2
|
SQL 运维 关系型数据库
MySQL运维系列 之 如何快速定位IO瓶颈
MySQL的瓶颈,一般分为IO密集型和CPU密集型 CPU出问题的情况比较少,最近就遇到过一次比较大的故障,这个话题后面会有一篇专题介绍 今天主要聊聊IO密集型的应用中,我们应该如何快速定位到是谁占用了IO资源比较多 背景 环境1.
6177 0