Я получаю сообщение об ошибке 405 при загрузке изображения JPEG из приложения iOs на сервер Rester. (Быстрый / Python) - PullRequest
1 голос
/ 24 мая 2019

Я создаю приложение iOs в XCode как часть второстепенного программирования, я хочу загрузить изображения на сервер Rester и сохранить их в папке.

Я настроил сборщик изображений и контроллер изображений в XCode и приложил все усилия, чтобы понять документацию Rester, но я все еще не могу понять, что это правильно.Я попытался преобразовать изображение в строку, но это только сложные вещи, и я должен иметь возможность просто загрузить само изображение.

Вот код для приложения:


    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            imageView.contentMode = .scaleAspectFit
            imageView.image = pickedImage
        }
        dismiss(animated: true, completion: nil)
    }


    func uploadImage() {
        let imageFile = imageView.image?.jpegData(compressionQuality: 1)
        if imageFile == nil { return }
        PictureController.shared.uploadImage(forPicture: imageFile!) {_ in
            print(self.picture)
        }
    }


    func uploadImage(forPicture picture: Data, completion: @escaping (Picture?) -> Void) {
        var request = URLRequest(url: uploadUrl)
        request.httpMethod = "POST"
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

        // Picture
        request.httpBody = picture

        // Upload Picture
        let task = URLSession.shared.dataTask(with: request) { (data,
            response, error) in
            let jsonDecoder = JSONDecoder()
            if let data = data,
                let picture = try?
                    jsonDecoder.decode(Picture.self, from: data) {
                completion(picture)
            } else {
                completion(nil)
            }
        }
        task.resume()
    }

И вот код на сервере:

from collections import defaultdict
from flask import Flask, request, g, flash, redirect, url_for, send_from_directory
from flask_restful import abort, Api, Resource
from werkzeug.utils import secure_filename
from database import *

UPLOAD_FOLDER = 'pictures'

app = Flask(__name__)
app.secret_key = 'The Key'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 64 * 1024 * 1024
api = Api(app)

ALLOWED_EXTENSIONS = set(['pdf', 'png', 'jpg', 'jpeg', 'gif'])



class Picture(Resource):
    def upload_file(self):
        if request.method == 'POST':
            f = request.files
            f.save('uploads/uploaded_file')
            return jsonify({'success': True})

api.add_resource(Picture, '/picture_upload')

if __name__ == '__main__':
    app.run(debug=True)

Я ожидал, что изображение будет аккуратно помещено в папку, но вместо этого я получаю сообщение 405, сообщающее, что я делаю что-то, что не разрешено.

Это моя первая публикация, любая помощь будет принята с благодарностью, как по проблеме, так и по формулировке моего вопроса.

...