如何在 json 中包含图像文件?
How do i include an image file in json?
我目前正在尝试向我的烧瓶 restful 服务发送一个 POST 请求,该请求将生成一个模型以保存到数据库中。
此模型将包含 url 到通过 cloudinary 托管的图像以及日期和名称等其他数据
我的问题是,在 Postman 中我只能发送 form-data
或 raw
,其中将包括 json。我可以上传到 cloudinary 并接收所需的 url,但是我无法从请求中获取 json,因此我无法完全生成要保存的模型。
image_json = request.get_json()
returns 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
当您使用 multipart/form-data 将文件发送到 flask 时,文件将位于 request.files,因此,在您的情况下,它将是
image_json = request.files['here is the key you add to the file on postman']
称为表单数据的其他内容将位于 request.form。所以,要做到这一点:
form_data = request.form
因此,使用 postman,当您 select multipartm/form-data 时,您将首先为文件命名,然后您将 select 它。名称(或密钥)将是字典中用于获取文件的密钥,如上所述。
此外,对于表单部分,密钥将以相同的方式工作
我目前正在尝试向我的烧瓶 restful 服务发送一个 POST 请求,该请求将生成一个模型以保存到数据库中。 此模型将包含 url 到通过 cloudinary 托管的图像以及日期和名称等其他数据
我的问题是,在 Postman 中我只能发送 form-data
或 raw
,其中将包括 json。我可以上传到 cloudinary 并接收所需的 url,但是我无法从请求中获取 json,因此我无法完全生成要保存的模型。
image_json = request.get_json()
returns 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
当您使用 multipart/form-data 将文件发送到 flask 时,文件将位于 request.files,因此,在您的情况下,它将是
image_json = request.files['here is the key you add to the file on postman']
称为表单数据的其他内容将位于 request.form。所以,要做到这一点:
form_data = request.form
因此,使用 postman,当您 select multipartm/form-data 时,您将首先为文件命名,然后您将 select 它。名称(或密钥)将是字典中用于获取文件的密钥,如上所述。 此外,对于表单部分,密钥将以相同的方式工作