我正在尝试将带有表单数据的POST请求从React前端发送到Go后端。
const upload = () => {
let data = new FormData();
data.append('file', file);
data.append('namespace', namespace);
const requestOptions = {
headers: { 'Authorization': 'basic ' + props.getToken() },
method: 'POST',
body: data
};
fetch(`${process.env.REACT_APP_BACKEND_URL}/upload`, requestOptions)
.then(
response => alert(response.status)
).catch(
error => console.log(error)
);
};
在后端,我尝试通过以下方式访问数据:
func uploadHandler(w http.ResponseWriter, r *http.Request) {
// Read content
r.ParseMultipartForm(10 << 20)
file, fileHeader, err := r.FormFile("file")
if err != nil {
fmt.Println(err)
}
fmt.Println(fileHeader)
var buf bytes.Buffer
io.Copy(&buf, file)
yamlData := buf.Bytes()
namespace := r.FormValue("namespace")
...
}
但是,我收到以下错误:
request Content-Type isn't multipart/form-data
此外,fileHeader是nil
。
我发现的唯一可能的解决方案是删除这篇文章中提到的标头,但在POST正文中编码授权令牌当然不是我解决此问题的首选方法。
由于已经有人问过这个问题,我不清楚这个问题:将标题设置为
headers: { 'Content-Type': 'multipart/form-data', 'Authorization': 'basic ' + props.getToken() }
导致同样的问题。
PS:React fetch似乎会自动生成如下标题:
multipart/form-data; boundary=----WebKitFormBoundarykm4IEyyauWp42XvA
手动设置另一个标头时,fetch API不会应用此标头。一个潜在的解决方案可能是组合标头,但我不知道这是如何工作的。
PPS:使用axios
尝试相同的操作会导致相同的问题。
axios({
method: 'POST',
url: `${process.env.REACT_APP_BACKEND_URL}/upload`,
data: data,
headers: { 'Content-Type': 'multipart/form-data', 'Authorization': 'basic ' + props.getToken() }
})
.then(
response => alert(response.status)
).catch(
error => console.log(error)
);
我认为将mode:"no-cors"
添加到您的Request estOptions
会有所帮助。这个库有一些奇怪的地方,我不明白,即使显式发送Authorize
标头,我也无法在后端看到它,所以您可能需要额外的配置来确保标头已发送。
我测试了后端,这绝对按预期工作(使用Postman发送内容类型
进行测试:多部分/表单数据和
附加文件
我尝试使用JQuery Ajax进行基本身份验证。我像这样向ajax请求添加授权标头。 然后在ASP. Net Web服务中,我尝试获取此标头。 当我打印到标题时,我看不到授权标题 缓存控制:无缓存连接:保持活动状态Pragma:无缓存接受:接受编码:gzip,deflate接受语言:tr tr,tr;q=0.9,en-US;q=0.8,en;q=0.7主机:示例。com参考:http://loc
我已经实现了一个使用基本身份验证(使用Spring Security性)的web服务器。 我在访问URL时禁用了默认身份验证入口点(它只返回401,而不是用www身份验证标头响应401),目的是防止浏览器显示身份验证弹出窗口。 我能够用javascript代码和命令行工具(如curl)连接到服务器,但是当我用浏览器(chrome)测试它时 <代码>curl-v-u用户:密码本地主机:8080/用户
问题内容: 我正在开发使用不同服务其余部分的图形界面(用Java编写)。我必须调用这样的服务: 呼叫服务: 当我从Angularjs服务文件中请求时,如果服务具有Content-Type = multipart / form- data,则会收到错误400(错误请求) 如果服务的Content-Type =“ application / x-www-form-urlencoded; charset
如何通过Axios.js发送带有令牌的身份验证头?我试过几件事都没有成功,比如: 给出以下错误:
我正在尝试使用“反应原生”中的功能从产品搜索 API 中获取信息。我已获得正确的访问令牌并将其保存到 State,但似乎无法在 GET 请求的授权标头中传递它。 到目前为止,我有以下情况: 我对代码的期望如下: < li >首先,我将从导入的API模块中< code >获取带有数据的访问令牌 < li >之后,我将< code>this.state的< code>clientToken属性设置为等
问题内容: 我知道对此有很多疑问,但我无法解决这个问题: 我想将输入中的文件上传到multipart / form-data中的服务器 我尝试了两种方法。第一: 这导致例如图像 它应该是多部分/表单数据 和另外一个: 但这要求一个边界标头,我认为不应手动插入… 解决此问题的干净方法是什么?我读过你可以做的 但是我不希望我的所有帖子都是多部分/表单数据。默认值应为JSON 问题答案: 看一下Form