POST /api/sendimage 400 (ПЛОХОЙ ЗАПРОС) Flask restful API из браузера

Я использую

Python 3.6.3
Колба ==1.0.2
Колба-Корс ==3.0.7
Колба-RESTful==0.3.7

для создания API, который используется для сбора изображений tiff с использованием метода post и сохранения его локально.

api = Api(app)
CORS(app)

 class CatchImage(Resource):
    @cross_origin(supports_credentials=True)
    def post(self):
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            if which_extenstion(filename) != "tiff":
                return json.dumps({
                    "id": None,
                    "error": "Unsupported file type"
                })

            else:
                unique_id, folder_path, save_path = get_unique_id(filename)
                try:
                    file.save(save_path)
                except FileNotFoundError:
                    LookupError("no uploads folder")
                convert_jpg_save(save_path)
                jpg_image_path = get_jpg_image_path(folder_path)
                img = [
                    url_for("send_image", filename=image)
                    for image in jpg_image_path
                ]

                return jsonify({
                    "filename ": file.filename,
                    "id": unique_id,
                    "urls": img,
                    "error": None
                 })

        return json.dumps({"error": "no file"})

api.add_resource(CatchImage, '/api/sendimage')

Я попробовал API с помощью Postman, который работает очень хорошо. Но когда я пытаюсь получить доступ к API из браузера, я получаю это

POST http://127.0.0.1:5000/api/sendimage 400 (BAD REQUEST)

Код для того же ниже, который сгенерирован почтальоном.

var form = new FormData();
form.append("file", "/home/blue/Templates/test.tiff");

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://127.0.0.1:5000/api/sendimage",
  "method": "POST",
  "headers": {
    "cache-control": "no-cache",
    "Postman-Token": "4fdcc138-5567-4c4d-8f7d-8967d45b3c2a"
  },
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

Я думаю, что это связано с CORS или установкой какой-то ошибки, которую я не смог понять.
Я хотел бы понять, что является вероятной причиной проблемы, и, скорее всего, ее решения. Заранее спасибо за ваше время - если я что-то упустил, переоценил или недооценил конкретный момент, дайте мне знать в комментариях,

2 ответа

400 (BAD REQUEST) означает, что отправленные данные не являются данными, ожидаемыми сервером. Я не думаю, что это связано с CORS.

Я бы порекомендовал использовать pdb в вашем post функция, чтобы найти, где ответ брошен.

import pdb; pdb.set_trace()

Согласно документации jQuery, вы должны объявить тип данных:

      $.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

возможно добавление этой помощи:

      dataType: "json",

Использованная литература:

Получение ошибки 400 неверных запросов в Jquery Ajax POST

Почтовый запрос Jquery ajax не работает

Другие вопросы по тегам