laravel 多部分/表单数据在axios放置请求上不起作用

l7wslrjt  于 2022-11-18  发布在  iOS
关注(0)|答案(1)|浏览(140)

我现在尝试在我的项目上创建一个带有文件上传的粗糙功能。我已经完成了创建部分,并且一切都很好,因为我用new FormData()实现了这个功能,方法是附加文件值,并从axios发送带有'Content-Type': 'multipart/form-data'头的post请求。
然而,如果我在头中传递'Content-Type': 'multipart/form-data',axios会发送一个空的主体。如果我删除它,它会发送实际的对象,但不发送上传的文件。我在带有Laravel后端的NextJs上实现了这一点。
这是密码
第一个

tkclm6bt

tkclm6bt1#

这似乎是Laravel项目中经常重复出现的问题。不确定是Axios还是Laravel本身造成的,但目前,以下解决方案有效:
不发送实际的HTTP PUT请求,而是发送一个HTTP POST请求,其中在formData中包含一个名为_method的参数,并将其值设置为put
将该字段添加到formData中,代码将如下所示:

const formData = new FormData();
      formData.append('_method', 'put');
      formData.append('first_name', values.first_name);
      formData.append('last_name', values.last_name);
      formData.append('phone_no', values.phone_no);
      formData.append('profile_picture', values.profile_picture, 'bermuda.png');
      formData.append('password', values.password);

      await axios
        .post(`/api/v1/users/${user.member_no}`, formData, 
         {
           headers: {'Content-Type': 'multipart/form-data'}
         })
        .then((res) => {
          console.log(res.data);
          if (res.status === 201) {
            toast.success('Member updated successfully.');

            refreshUser(); // mutating the swr request
          }
        })
        .catch((err) => {
          toast.error(err.response.data.message);
        });

      setLoading(false);
    },

相关问题