gpt4 book ai didi

javascript - 多部分 HTTP 响应

转载 作者:数据小太阳 更新时间:2023-10-29 04:13:13 24 4
gpt4 key购买 nike

目标是一个 Node.js/hapi API 服务器用两件事来响应浏览器的 AJAX 请求:

  • 媒体文件(例如图像)
  • 包含文件元数据的 JSON 对象

这是两个单独的项目,只是因为二进制数据不能轻易地存储在 JSON 中。否则,这将是一个单一的资源。尽管如此,最好将它们在单个响应中发送。

我们使用 multipart/form-data 在单个请求中上传这些。在这种情况下,浏览器提供了一种内置机制来序列化主体,并且大多数服务器端框架都知道如何解析它。 但是如何在相反的方向对响应做同样的事情呢?也就是说,服务器应该如何序列化主体以将其传输给客户端?

据我所知,multipart/mixed 可能是一种有用的内容类型。但是很少有人谈论这个。大多数人似乎求助于提供两个单独的 GET 路由,每个路由一个。我不喜欢这样,因为它会让你面临竞争条件等问题。我错过了什么?

另请参阅我在 hapijs/discuss#563 中的问题.

最佳答案

您可以将响应作为 multipart/form-data 并使用 Response.formData() 在客户端读取响应

fetch("/path/to/server", {method:"POST", body:formData})
.then(response => response.formData())
.then(fd => {
for (let [key, prop] of fd) {
console.log(key, prop)
}
})

let fd = new FormData();
fd.append("json", JSON.stringify({
file: "image"
}));
fetch("data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQACgABACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkEAAoAAgAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkEAAoAAwAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkEAAoABAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQACgAFACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQACgAGACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAAKAAcALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==")
.then(response => response.blob())
.then(blob => {
fd.append("file", blob);
new Response(fd)
.formData()
.then(formData => {
for (let [key, data] of formData) {
console.log(key, data)
}
})
})

关于javascript - 多部分 HTTP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47067312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com