【问题标题】:Javascript XMLHttpRequest with formdata sending empty body带有表单数据的Javascript XMLHttpRequest发送空正文
【发布时间】:2016-10-15 17:54:02
【问题描述】:

我尝试发送这样的文件

var formData = new FormData();
formData.append("avatar", document.getElementById('imageFile').files[0]);

var request = new XMLHttpRequest;
request.open("PATCH", "http://localhost:9090/users/me/avatar");
request.send(formData);

但是,无论我尝试什么,应发送的所选文件的实际内容都保持空白。这是 Chrome 的网络标签的屏幕截图

我尝试了不同的文件和不同的请求方法,但总是一样的。

我也试过formData.append("testfield", "some string"); 并且发送正确,我可以在请求正文中看到“一些字符串”,问题似乎与文件有关。

我做错了吗?

谢谢

【问题讨论】:

    标签: javascript ajax xmlhttprequest multipartform-data form-data


    【解决方案1】:

    PATCH 是一种用于 API 更改的方法,而不是发送文件。
    您应该使用 POST 或 PUT 上传文件

    var formData = new FormData();
    formData.append("avatar", document.getElementById('imageFile').files[0]);
    
    var request = new XMLHttpRequest;
    request.open("POST", "http://localhost:9090/users/me/avatar");
    request.send(formData);
    

    此外,将formData 对象记录到控制台时,您将无法看到数据。

    【讨论】:

    • 谢谢,但它是一样的,我已经尝试过 POST 和 PUT 并且它是一样的。刚才又试了一次,没什么区别。这让我发疯,看起来真的很奇怪。
    • 如果你登录document.getElementById('imageFile').files[0],你会得到什么?您如何在服务器端捕获文件?
    • 我正在将我选择的文件登录到控制台,这样就可以了。此时服务器端无关紧要,因为“头像”字段发送时没有内容,请参见上图:(
    • 请求应该是这样的,您不会在控制台中看到 POST 或 PUT 请求中的二进制数据,您仍然必须在服务器上捕获该文件。
    • 天哪,我真笨。我希望在网络选项卡中看到一些东西。原来这是我的服务器代码错误,但很奇怪,所以我怀疑我的客户端代码有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2023-02-05
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多