参考:https://blog.csdn.net/funkstill/article/details/104312066
有以上两种方式:1、直接以文件格式上传,2、转换为base64编码格式上传,但最终服务器返回的都是存储照片的地址
方式1:通过formdata对象完成,过程如下:
let formData = new FormData();
formData.append('chunk', file)//file为需要上传的文件
formData.append("filename",formateFileName(file.name).filename)
最后在使用ajax上传东西时把该formdata实例作为数据上传即可
方式2:通过filereader对象来把文件转换为base64格式再进行上传
//file为需要处理的文件
function convertBase64(file) {
return new Promise(resolve => {
let fileread = new FileReader()
fileread.readAsDataURL(file)
fileread.onload = ev => {
resolve(ev.target.result)
}
})
}
用ajax进行上传,请求方式用post,因为get是把文件附加到url后面的,文件太多这是不可取的
并且注意细节,比如上传文件的格式限制、文件大小的限制,
如果一次性上传的文件太多,不管用哪种方式都得进行分流处理,不然会卡,
扩展:axios是基于promise管理的ajax库,它包含更多情况的配置,上面的封装默认使用post方法,还有get方法,以及服务器响应的情况未进行封装,