如何在JSON中包含图片文件?

时间:2019-04-09 18:49:42

标签: flask flask-restful

我当前正在尝试向我的flask restful服务发送POST请求,该请求将生成要保存到数据库的模型。 该模型将包含通过cloudinary托管的图像的URL以及日期和名称等其他数据

我的问题是在邮递员中,我只允许发送form-dataraw,其中将包含json。我可以上传到cloudinary并接收所需的url,但是我无法从请求中获取json,因此无法完全生成要保存的模型。

image_json = request.get_json()返回None

我的问题是,是否只允许我发送一个或两个raw or form-data,我应该如何获取图像以及保存模型所需的相应数据?

from cloudinary.uploader import upload
from cloudinary.utils import cloudinary_url
from flask_restful import Resource
from flask import request
from models.image import ImageModel
from schemas.image import ImageSchema

image_schema = ImageSchema()
image_list_schema = ImageSchema(many=True)


class Image(Resource):
    @classmethod
    def post(cls):
        image_to_upload = request.files["image"]
        if image_to_upload:
            upload_result = upload(image_to_upload)
            url = cloudinary_url(upload_result['public_id'], format="jpg", crop="fill", width=100,height=100)[0]

            full_size_url = cloudinary_url(upload_result['public_id'], format="jpg", crop="fill", width=200, height=100, radius=20, effect="sepia")[0]

            image_json = request.get_json() # this returns None
            image_json["url"] = url
            image_json["full_size_url"] = full_size_url
            image = image_schema.load(image_json)

            try:
                image.save_to_db()
            except:
                return {"message": "error uploading file"}
            return image_schema.dump(image), 201
        return {"message": "no image uploaded"}, 401

1 个答案:

答案 0 :(得分:0)

当您使用multipart / form-data将文件发送到flask时,该文件将位于request.files,因此,根据您的情况,将是

image_json = request.files['here is the key you add to the file on postman']

其他材料称为form-data,将位于request.form。因此,要获得这一点:

form_data = request.form

因此,使用邮递员,当您选择multipartm / form-data时,将首先为文件指定一个名称,然后再选择它。如上所述,名称(或键)将是字典中用于获取文件的键。 另外,对于表单部分,键将以相同的方式工作