尝试使用上传文件进行 POST 调用时出现 HTTP 400 错误

HTTP 400 error while trying to make a POST call with upload file

提问人:copenndthagen 提问时间:11/17/2023 更新时间:11/18/2023 访问量:46

问:

我有一个与 Java 控制器中定义的文件上传相关的端点,如下所示;

@RequestMapping(value = "/upload/file", method = { RequestMethod.POST})
public MyResponse<?> uploadFile(@RequestHeader(required = true) String country, @RequestHeader(required = true) String user, @RequestParam("file") MultipartFile file)
{
}

我正在尝试从UI调用它,如下所示;

const response = await MyReactUtility.postMultipartFileContent(endpoint, result);

postMultipartFileContent(url, data) {
    let formData = new FormData();
    formData.append("file", data.files[0]);
    return axios.post(url, formData).catch(err => console.log("Axios multipart err: ", err));
},

我传递给上面的“postMultipartFileContent”的“data”参数如下所示;enter image description here

在 Chrome 网络选项卡中,我可以看到 Payload 为;

Form Data
    file: (binary)

但是,我看到 400 错误请求错误。

javascript reactjs spring-boot axios blob

评论

0赞 J Asgarov 11/17/2023
您应该将日志打开到调试级别,以便查看Spring Boot App向您发送400的原因(例如,您可以使用中的设置来完成)。如果我必须猜测,我会说您没有发送您标记为必需的标头 - 您可以尝试将它们设置为并查看是否有帮助 - 但这只是一个猜测,请打开并检查日志logging.level.org.springframework.web: DEBUGapplication.propertiesrequired = false

答:

0赞 Akshit 11/17/2023 #1

该问题可能与标头或您在前端中处理文件的方式有关。 试试这个:

const response = await MyReactUtility.postMultipartFileContent(endpoint, result);

postMultipartFileContent(url, data) {
    let formData = new FormData();
    formData.append("file", data.files[0]);
    return axios.post(url, formData, {
        headers: {
            'Content-Type': 'multipart/form-data',
            'country': 'your_country_value', // Replace with actual country value
            'user': 'your_user_value' // Replace with actual user value
        }
    }).catch(err => console.log("Axios multipart err: ", err));
}

您可以根据需要更改值的使用。