文本编辑器POST上传大文件失败原因探究

新项目需要新闻发布功能,类似csdn发帖,前端可使用文本编辑器插件(博主使用JQuery文本编辑器插件),究其原理,编辑器是独立的html,数据提交时内容以html片段存于数据库,文字尚可(假设gbk编码,汉字占2字节,则1M 可存1*1024*1024/2 = 524288个汉字),但编辑器插入大图及多图时,图片通过base64转码为字符串(经测试约1M大小图片转码后的base64码长度约为212266字符),超长文本则导致上传失败,以下为解决办法:


后台为PHP,假设保存编辑器内容字段为content

错误1  content字段类型为varchar

原因:varchar最大长度为65535。

解决:使用更大存储数据类型:mediumtext(最多2的24次方-1个字符)、Longtext(最多2的32次方-1个字符)。

错误2  content 字段类型为mediumtext、Longtext时,上传大文件时出现404错误如下图:

猜测1  接口代码异常

经测试小文件可正常上传,排除。

扫描二维码关注公众号,回复: 1747424 查看本文章

猜测2  文件超过POST最大数据量

查阅文献知,理论post没有大小限制,HTTP规范无大小限制,实际post传递的数据量取决服务器设置以及内存。

解决:配置php.ini  post_max_size = 200M (phpstudy初始为1M)

结果:大文件上传继续404

猜测3  上传文件大小超出数据库字段保存最大值

理论mediumtext可存储:16777215 字符、Longtext可存:4294967295字符,应该可以满足需求。所以博主手动测试数据库,将之前保存的数据复制若干次后修改该字段,保存后mysql报2006错误如下图:

百度后发现是mysql配置问题,默认max_allowed_packet过小所致。

解决:修改mysql配置文件my.ini,在[mysqld]下添加以下代码

max_allowed_packet = 100M

interactive_timeout=28800000

wait_timeout=28800000


解决猜测 2 及猜测 3 后,大文件保存成功。








猜你喜欢

转载自blog.csdn.net/wq18512847606/article/details/78964602
今日推荐