如何在JavaScript中将图像二进制数据提交到Flask REST API
问题的出现原因:
这位用户在尝试将图像二进制数据通过JavaScript发送到Flask REST API,但是之前的回答都没有起作用。他在代码中使用了input和button元素,并在JavaScript代码中定义了一个名为doupload()的函数,该函数用于将文件上传到指定的URL。但是,他在使用PUT方法时遇到了问题,因为他使用的是web server for chrome,而该服务器不支持PUT方法。
解决方法:
为了解决这个问题,用户进行了以下操作:
1. 在HTML代码中,他使用了input元素来让用户选择文件,并使用button元素来触发上传操作。
2. 在JavaScript代码中,他定义了一个名为doupload()的函数,该函数在点击按钮时被调用。
3. 在doupload()函数中,他使用document.getElementById()方法获取选择的文件,并将其保存在data变量中。
4. 然后,他使用fetch()方法发送PUT请求到指定的URL,其中包含了文件的二进制数据。
5. 最后,他使用alert()方法显示上传成功的提示信息,并使用location.reload()方法重新加载页面。
需要注意的是,用户在使用web server for chrome时,需要在高级选项中启用文件上传选项,否则将会出现不允许上传的错误。
这就是用户遇到问题的原因以及解决方法。他通过使用JavaScript将图像二进制数据发送到Flask REST API,并成功上传了文件。
问题的原因是在使用JavaScript将图像二进制文件上传到Flask REST时出现了错误。解决方法是使用fetch或XMLHttpRequest发送POST请求,并将图像文件作为FormData附加到请求中。以下是详细的解决方法:
1. 使用fetch发送POST请求:
let photo = document.getElementById("image-file").files[0]; let formData = new FormData(); formData.append("photo", photo); fetch('/upload/image', {method: "POST", body: formData});
2. 使用XMLHttpRequest发送POST请求:
let photo = document.getElementById("image-file").files[0]; let req = new XMLHttpRequest(); let formData = new FormData(); formData.append("photo", photo); req.open("POST", '/upload/image'); req.send(formData);
需要注意的是,服务器端可以通过读取FormData参数中的原始文件名以及其他信息来获取图像文件的相关信息。此外,不需要手动设置请求头的Content-Type为multipart/form-data,浏览器会自动设置该参数。在请求中还可以附加额外的数据,例如将JSON对象转换为字符串并附加到FormData中。
上述解决方法适用于所有主流浏览器,并且可以在服务器端正确地处理文件上传。如果出现错误,可以检查服务器端是否正确实现了相应的POST方法以及请求的URL是否正确。