在没有FormData API的情况下使用axios发送文件

时间:2018-07-27 13:51:14

标签: javascript ajax axios multipartform-data

我可以使用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这样的元数据,但不能发送整个对象。

1 个答案:

答案 0 :(得分:1)

是的,可以在客户端上手动进行编码。如果您确实想了解有关表单工作原理的每个小细节,则自己编写表单数据编码器可能会很有用。但是,对于大多数应用程序,我不建议这样做。 FormData API应该在生产中使用。

您将需要参考RFC 7578来实现编码器。

  

该规范定义了multipart / form-data媒体类型,它可以被多种应用程序使用,并可以由多种协议进行传输,作为用户填写后返回一组值的一种方式表格。

更多资源: