当前位置: 首页 > 知识库问答 >
问题:

如何使用Falcon Python从POST请求中保存图像

宋景福
2023-03-14

我正试图找到一种方法来保存我从POST请求中获得的图像,到目前为止,我找到的所有解决方案都没有效果,例如,这个。

上述解决方案的问题是,我只是得到了一个超时错误。

我现在试着稍微改变一下代码,但仍然不起作用,你能帮我吗?

    def on_post(self, req, resp):
        """Handles Login POST requests"""
        json_data = json.loads(req.bounded_stream.read().decode('utf8'))
        base64encoded_image = json_data['image_data']
        with open('pic.png', "wb") as fh:
            fh.write(b64decode(base64encoded_image))

        resp.status = falcon.HTTP_203
        resp.body = json.dumps({'status': 1, 'message': 'success'})

我得到的错误是"json.decoder.JSONDecodeError:期望值:第1行第1列(char 0)"

共有1个答案

颜德馨
2023-03-14

在你的猎鹰后端

试试falcon multipart

pip3 install falcon-multipart

然后将其作为中间件。

from falcon_multipart.middleware import MultipartMiddleware

api = falcon.API(middleware=[MultipartMiddleware()])

这将解析任何多部分/表单数据传入请求,并将密钥放入req_参数,包括文件,因此可以像其他参数一样获取字段。

# your image directory
refimages_path = "/my-img-dir"

# get incoming file
incoming_file = req.get_param("file")

# create imgid
imgId = str(int(datetime.datetime.now().timestamp() * 1000))

# build filename
filename = imgId + "." + incoming_file.filename.split(".")[-1]

# create a file path
file_path = refimages_path + "/" + filename

# write to a temporary file to prevent incomplete files from being used
temp_file_path = file_path + "~"
with open(temp_file_path, "wb") as f:
    f.write(incoming_file.file.read())

# file has been fully saved to disk move it into place
os.rename(temp_file_path, file_path)

在你的前端

发送内容类型:多部分/表单数据 在请求头中。也不要忘记提供边界,因为按照RFC2046中的规定:

多部分实体的内容类型字段需要一个参数“边界”。然后,边界分隔符行被定义为一行
,完全由两个连字符(“-”,十进制值45)组成
,后跟内容类型标题字段中的边界参数值、可选线性空格和终止的CRLF。

 类似资料:
  • 我尝试做的是从同一个站点发布数据并从它创建一个新的订单(当提交按钮被点击时)。我没有任何信息在我的请求。身体,我怀疑是在我的ejs出了问题,任何反馈是非常感谢的。 我的ejs文件: 和我的js文件:

  • 问题内容: 我不想使用文件,但是只有django才需要发出POST请求。 就像发送请求一样。 问题答案: 结合使用urllib2和urllib中的方法即可解决问题。这是我使用这两种方法发布数据的方式: 是用于打开URL的方法。 将参数转换为百分比编码的字符串。

  • 我阅读了一些将jsons发布到服务器的示例。 有人说: OkHttp是Java提供的HttpUrlConnection接口的实现。它提供了一个用于写入内容的输入流,而不知道(或关心)该内容是什么格式。 现在我想用name和password参数对URL做一个普通的post。 这意味着我需要自己将名称和值对编码成流?

  • 问题内容: 我想知道如何使此代码支持数组?目前,数组似乎只发送第一个值。 这是我的代码: 这就是在api上收到的 中的第二个值发生了什么? 问题答案: 您只是错误地创建了数组。您可以使用http_build_query: 因此,您可以使用的整个代码为:

  • 我如何解析JSON请求之类的东西? 示例代码: 带有_名称的位置_为无

  • 问题内容: 我刚刚使用Python图像库(PIL)进行了一些图像处理,这是我之前发现的用于执行图像的傅立叶变换的文章,但是我无法使用save函数。整个代码运行良好,但不会保存生成的图像: 我得到的错误如下: 如何使用Pythons PIL保存图像? 问题答案: 已解决有关文件扩展名的错误,您可以使用(不带点)或将输出名称与扩展名一起传递。现在要处理该错误,您需要在频域中适当地修改数据以将其保存为整