我可以使用axios和FormData api将文件发送到服务器,如下所示:
persist(avatar){
let data = new FormData();
data.append('avatar', avatar);
axios.post(`/api/users/${this.user.name}/avatar`, data)
.then(() => flash('Avatar uploaded!'));
}
传递给persist()的头像参数是来自“ file”类型的表单输入的文件对象。
然后我可以在服务器端获取文件。
是否可以在不使用FormData的情况下进行操作?也就是说,要模拟FormData的工作?基本上,我试图了解FormData api所做的额外工作。也许使用axios是不可能的,我应该使用简单的XMLHttpRequest来实现。
当然,仅仅发送文件对象是行不通的:
axios.post(`/api/users/${this.user.name}/avatar`, {avatar: avatar})
在服务器端,头像对象将为空。我可以发送像avatar.name这样的元数据,但不能发送整个对象。
答案 0 :(得分:1)
是的,可以在客户端上手动进行编码。如果您确实想了解有关表单工作原理的每个小细节,则自己编写表单数据编码器可能会很有用。但是,对于大多数应用程序,我不建议这样做。 FormData
API应该在生产中使用。
您将需要参考RFC 7578来实现编码器。
该规范定义了multipart / form-data媒体类型,它可以被多种应用程序使用,并可以由多种协议进行传输,作为用户填写后返回一组值的一种方式表格。
更多资源: