travel.corechan.cn
最近刚入门java后台,用原生java写的项目,记录一下其中遇到的问题以及解决——图片上传。
post方法详细
概述
不知道现在技术最常用的方案是啥,我看了许多文章才知道,原来我用了这么多的post方法接数据,其实post上传数据光是格式就有许多种:
- application/x-www-form-urlencoded
- multipart/form-data
- application/json
- text/xml
这个是参考大佬的博客看到的:四种常见的POST提交数据方式 写的很详细。
看了这篇文章我才知道原来之前我没管前端的哥们儿发的啥,我都是用req.getParameter("")接的数据,能接到数据而且甚至不用decode就能正常显示也不是没道理的,post请求默认就是发的x-www-form-urlencoded。文字就说了encoded咯。
###form-data实战 首先感谢另一位大佬关于form-data的讲解: Java中,当表单含有文件上传时,提交数据的如何读取
这里使用了apache.commons.fileupload.jar的包,据说是比较常用的方案。如果想了解不引包怎么解决问题,我这篇博客没啥用。 >不引包的话需要在request.getInputStream,然后去解析数据流,自己造轮子比较容易出错,在这里表示不推荐。
具体操作我写了个demo,注释比较详细
1 | import org.apache.commons.fileupload.FileItem; |
总结
form-data有几个要注意的点:
- form-data发到后台上的数据是不会帮你encode的,毕竟文件就是二进制流,完全没有encode的必要性。所以在form-data里发文字之前请前端的同学先urlencode一下
- java后台处理文件内容,如果保存的位置需要新建文件夹,记得要先mkdir,不然会尴尬的报错“找不到文件位置”,具体来说就是这样,先是错误的示范:
1
2
3
4//错误的示范
//假设我文件要存在后台根目录的testcore文件夹下的savepath文件夹中,以savename为文件名
File file=new File("/testcore/"+savepath,savename);
fileItem.write(file);
1 | //正确的示范 |