前面是我的一些心路历程,如果想直接知道修正方法的朋友们请直接跳至文末。
最近在测试web前后端对大型文件的传输功能,因为本人学艺不精,出现了一些bug。起初我以为是文件传输大小达到了阈值,于是按照网络上提供的部分方法,将Tomcat/conf/server.xml中,"maxPostSize"这一属性的值取为0,以使Post方法发送的数据流大小不受限制。
再次用ajax提交数据,发现之前的报错确实不见了,但是却发现服务器上无法获取到ajax上传的参数。然后用Servlet试着打印了一下登录时的账号和密码,下面是登录的ajax代码:
以及Servlet的代码:
我反复检查了上述代码,应该是没有问题的,但是request.getParameter()获取到的值全是null:
这时我打开Chrome的开发者工具,查看刚刚发送的xhr的请求:
在完成上方步骤的测试后,我才意识到应该是服务器出了某些问题,导致获取的数据值全为null。在尝试过网络上的一切解决方法无果后,我把目光瞄到了之前修改过的Tomcat的server.xml上。
当我把maxPostSize的值调整为-1时,我再次进行测试。后台果然能读到数据了:
接着我又测试了一下大文件的传输,前端代码如下:
这里是将图片文件转码成base64编码再发送给后端。
而后台也确实收到了前端发送过去的图片信息:
综上,这个maxPostSize成功地浪费了我一天的时间。其值设为0表示不限制大小这一点并不适用于所有的Tomcat!!!
我再强调几遍:
不要随便设置 maxPostSize = "0" !!!
不要随便设置 maxPostSize = "0" !!!
不要随便设置 maxPostSize = "0" !!!
对于不同版本的Tomcat,maxPostSize = "0" 的效果并不完全一样,对于某些版本来说,设置成0确实不会限制传输的数据大小。但对于另外的版本来说(比如我,我的版本是9.0.41,设置成-1才有效),将其设置成0很有可能导致你的POST方法什么都传不了!
从Apache提供的官方文档中可以看出,不限制post的传输大小只有在maxPostSize被设置为小于零的数时才有效,而不是等于零。当maxPostSize没被设置任何值时,则默认为2MB。实际上,在Tomcat的7.0.63及之后的版本中都只能设置成负数,之前的版本才是0和小于0的数。然而,目前Apache官网上的最低版本已经到了7.0.107了……
Tomcat的早期版本已经被官方宣布“寿终正寝”了。大人,时代变了!
因为我的问题比较小众(大概吧),因此很可能没有包含到你所遇到的问题,我把一些常见的问题都罗列了一下,欢迎各位进行补充。
若直接使用form传输数据,请注意一下form标签是否设置了entype="multipart/form-data",这种情况下不能直接用getParameter()来获取对应的参数值,可以引入commons-fileupload的jar包,判断fieldName。这种方法一般用于同时上传文件和字段的情况,如果你只需要上传字段,那么直接删去enctype属性就行,这时表单的enctype会默认使用"application/x-www-form-urlencoded"进行上传。
如果用的是ajax,注意一下是否设置了contentType属性,具体修改方式如上一条所述。
鄙人不才,目前我只遇到了这么几种情况,欢迎各路大神进行补充。本人作为初学者,如文章中出现纰漏,也烦请各位帮忙指出。
「艾尔登法环」梅琳娜手办开订 立体手办▪
万代「艾尔登法环」白狼战鬼手办开订 立体手办▪
「夏目友人帐」猫咪老师粘土人开订 立体手办▪
「五等分的新娘∬」中野三玖·白无垢版手办开订 立体手办▪
「海贼王」乌索普Q版手办开订 立体手办▪
良笑社「初音未来」新手办开订 立体手办▪
「黑岩射手DAWN FALL」死亡主宰手办开订 立体手办▪
「盾之勇者成名录」菲洛手办登场 立体手办▪
「魔法少女小圆」美树沙耶香手办开订 立体手办▪
「咒术回战」七海建人粘土人登场 立体手办▪
「五等分的新娘」中野二乃白无垢手办开订 立体手办▪
「为美好的世界献上祝福!」芸芸粘土人开订 立体手办▪
「公主连结 与你重逢」六星可可萝手办开订 立体手办▪
「女神异闻录5」Joker雨宫莲手办开订 立体手办▪
「间谍过家家」约尔・福杰粘土人登场 立体手办▪
「街角魔族 2丁目」吉田优子手办开订 立体手办▪
「火影忍者 疾风传」旗木卡卡西·暗部版粘土人登场 立体手办▪
「佐佐木与宫野」宫野由美粘土人开订 立体手办▪
「盾之勇者成名录」第2季拉芙塔莉雅手办开订 立体手办▪
「咒术回战」两面宿傩Q版坐姿手办开订 立体手办▪
「DATE·A·BULLET」时崎狂三手办开订 立体手办▪
「狂赌之渊××」早乙女芽亚里粘土人开订 立体手办▪
「魔道祖师」魏无羨粘土人开订 立体手办▪
「新·奥特曼」奥特曼手办现已开订 立体手办▪