义乌网站建设制作商,北京万网网站备案,安徽省住房与城乡建设厅网站,网站开发好学吗今天在上课的时候#xff0c;遇到了一个比较坑的问题#xff0c;有个学生拿来了她的代码#xff0c;让我给她看看为什么传值传不过来。 首先#xff0c;前端是这样的#xff1a;
function upload(){var formData new FormData();formData.append(images, $(#previewImg)…今天在上课的时候遇到了一个比较坑的问题有个学生拿来了她的代码让我给她看看为什么传值传不过来。 首先前端是这样的
function upload(){var formData new FormData();formData.append(images, $(#previewImg)[0].files[0]);var id1$(input[nameid]).val()formData.append(id, id1);$.ajax({type:post,processData: false,contentType: false,url:uploadImage,data:formData,success:function(data){}});
}后端是这样的
PostMapping(/uploadImage)public Map uploadImage(Integer id,MultipartFile images,HttpSession session){
// System.out.println(id);
// System.out.println(images);}}然后上传文件的配置器是这样的
bean idCommonsMultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver
property namedefaultEncoding valueutf-8/
property namemaxUploadSize value1048675000/
property namemaxUploadSizePerFile value1048675000/
/bean她遇到的第一个问题是后端这里接受值的时候接受到的id和文件都是null然后再后续的使用中报空指针了。
看起来就是一个很简单的空指针问题我拿来查的时候先看了一下她这边的前段开始我没有注意到是使用的fromdata我以为是普通的json传输而且在network中也很明显能看到请求头和带的参数。
后端可以报空指针说明后端的代码也进去了说明请求头也没问题。 所以我觉得问题原因可能出在请求头接受值的地方事实证明老中医的直觉是对的 所以我把她的后端代码头做了修改。
public Map uploadImage(HttpServletRequest request,HttpSession session){用HttpServletRequest 来接受试试这时候我还没注意到fromdata然后发现在req中也获取不到id我有点麻了我觉得可能是写法问题导致这个数据不在req里面我再换个写法 public Map uploadImage(RequestParam Integer id,RequestParam MultipartFile images,HttpSession session){可能是我对HttpServletRequest 忘记的多找不到值在哪儿我直接用注解去取值看看结果发现还是null。我当时就无语了这他妈的。
然后我就又回头去看前段既然这里折腾半天没效果不如换个阵地。之前前端传后端没见过二进制的文件流啊是不是因为这玩意的原因我去前段把她这里set文件的地方给她注掉了我心想这不就变成了一个普通的ajax了么这不应该有问题吧。
然后我就去后端看上面的三板斧又转了一圈还不行。我真是见了鬼了。 然后学生和我说老师是不是fromdata的问题。 我一看这里怎么还不一样呢我以为这里就是个普通的json。 完了又看了俩眼这个fromdata的用法很简单啊前段传值后端接收没毛病啊。这还有什么问题不成 搜了一下fromdata使用的时候注意事项有文章说要加个注解MultipartConfig但是我试过了发现还是null这怎么可能啊我要颜面扫地了。 这个时候这个问题已经看了接近2个小时了这个时候学生吐槽说一般这种一看看一天的问题八成是什么小问题不知道哪儿写错了。 我也同意这种想法于是我的目光又回到了后端的接受请求的地方
public Map uploadImage(Integer id,MultipartFile images,HttpSession session){她这里前端fromdata设置值的时候先塞的file后塞的id会不会是这里接受参数的顺序有影响 然后我把这句改了一下 public Map uploadImage(MultipartFile images,Integer id,HttpSession session){对没错我调换了俩个参数的位置试了一下死马当活马医了 然后然后然后这个问题就解决了他的报错终于跳到下一步了
调换了参数位置以后出现了新的报错说她没有配置文件解析器但是她这里是有配置MultipartFilte上传文件解析器的然后这个问题比较简单看了一下解析器的id不对。应该是
bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver
property namedefaultEncoding valueutf-8/
property namemaxUploadSize value1048675000/
property namemaxUploadSizePerFile value1048675000/
/bean一下午这就过去了看了一个问题看了快2个半小时所以必须写个文章记录一下。