Я перехожу с http.server на Flask.Моя загрузка изображений с использованием AJAX теперь прервана.Это работает на Python 3.
Устранение неполадок, которые не работали:
Я включил multipart / form-data в запрос Ajax.
Я попытался создать общий и выделенный маршрут для загрузки.
Я добавил @cross_origin (), это решило проблему для аналогичного вопроса.
Я пытался просмотреть другие запросы, ничего не содержит.
Я изначально запустил приложение на 0.0.0.0, поэтому изменил его на127.0.0.1.
Я попытался добавить в FormData целую форму и только изображение.Я не очень хочу менять Ajax, поскольку он работает на http.server.
Пробовал синхронизировать и асинхронно выполнять запросы AJAX.
Независимо от того, что я пытаюсь, я всегда получаю один и тот же результат:
print(request.files)
возвращает ImmutableMultiDict([])
Я бы предпочел избегать использования JQuery, так как этот должен работать, так какон работает на http.server.
Соответствующий код:
Неработающая колба:
@app.route("/qr_upload", methods=["GET", "POST"])
@cross_origin()
def receive_image():
if (request.method == "POST"):
print("qr_code" in request.files) # This always returns False.
multipart_data = request.files["qr_code"]
return "Post"
if __name__ == "__main__":
app.run("127.0.0.1", PORT, True)
Работающий AJAX на http.server
// Add the image to the request and send it.
var formData = new FormData(document.getElementById("qrPickerForm"))
xhttp.open("POST", "/qr_upload")
xhttp.setRequestHeader("Content-Type", "multipart/form-data")
xhttp.send(formData)
Похожие HTML
<form action = "/qr_upload" id = "qrPickerForm" name = "qr_form" method="post" enctype = "multipart/form-data">
<input id = "qrFilePicker" name = "qr_code" type = "file" accept="image/*" capture="camera">
<input type="submit">
</form>
Рабочий http.server:
def do_POST(self):
# Extract the multiform data from the POST request
cLen = int(self.headers["Content-Length"])
body = self.rfile.read(cLen)
# Decode the multiform data and get the image bytes.
multipart_data = decoder.MultipartDecoder(body, "multipart/form-data; boundary=WebKitFormBoundary")
# This and Flask's code should have the same data here.
Handler = S
with socketserver.TCPServer(("", PORT-1), Handler) as httpd:
httpd.serve_forever()
Обновление 1:
Работает, еслиЯ отправляю изображение с помощью кнопки отправки формы, но не с помощью AJAX.Хотя пока не понял, почему.