这两周给极客微博加上了“发微博的时候,可以带上图片”的功能(作为一个“微博”app,怎么能没有发图片微博的功能呢?)。没想到,做这个小功能的折腾程度,超出了我的预期。
其实如果是纯RailsMVC,那么给微博加上图片功能,简直不要太简单。后端两行核心代码:
#tweet.rbhas_many_attached:images#tweet_controller.rbparams.require(:tweet).permit(:body,images:[])
然后前端相关的template文件里面,相应的加上文件选择控件,和显示图片的相关代码就搞定了,毕竟ActiveStorage什么都帮你做好了。
可是极客微博前端用了Vue。发微博的时候,是通过前端发POSTAjax请求的方式发的,所以事情就变得复杂了。首先,你没有办法像文本字段一样,给jsonbody加一个file字段,然后POST给后端。所以想要在前端用Ajax发请求上传图片,就剩下两种办法:
1.在前端先把图片上传到图片存储服务(我用的是阿里云OSS),拿到上传后的图片url,然后把url传给后端。
2.使用FormData。这是经过一些搜索,以及在