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

Flask:如何使用Flask和ctypes将上传的文件作为二进制数组直接传递给c-styple DLL?

笪欣嘉
2023-03-14

我想将上传的文件从多部分/表单数据直接传递到我的DLL函数,而不将其保存为临时文件。

我的c风格DLL函数如下所示:

int process_image(unsigned char* image, int size);

参数“图像”预计是一个包含jpeg文件完整数据的二进制数组,参数“大小”是“图像”的大小。因为这个数据正是多部分/表单数据的一部分,所以我想提取它,并使用烧瓶和ctype直接将它传递给DLL函数。

但是在我研究了Flask之后,我发现Flask会将多部分/表单数据中的文件提取为文件存储对象(request.files),如:

@app.route("/", methods=['POST'])
def getimages():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

所以我的问题是:

  1. 如何使用烧瓶从Multipart/form-data获取二进制图像(jpeg)数据?
  2. 那么我如何使用ctype转换这个二进制数据并将其直接传递给我的DLL函数?

共有1个答案

祁嘉言
2023-03-14

我只能部分回答你的问题。

第一部分使用:

f = request.files['file']
bin_file = StringIO.StringIO(f.read())  # or ByteIO, whatever you like
# Now you have file in memory as binary
# I recommend using bin_file.seek(0) before every read/modification/write

我在C和DLL类代码方面的经验非常有限。所以我不能给你直接的解决办法。但我可以给你一些提示我该如何解决它。

解决方案之一是将StringIO/ByteIO作为参数传递给C/C程序。我会尝试使用python的子流程

另一个解决方案是为代码编写python包装器,直接在python/flask中调用它。再说一次,我没有这方面的经验。

 类似资料:
  • 问题内容: 我在烧瓶中有一个称为数组的函数,该函数接收一个列表并打印出列表中的项目: 在客户端,我想将名为str的javascript数组传递给该数组。我该怎么办?这就是我现在所拥有的,但是Flask没有读取添加的变量。有任何想法吗? 问题答案: Flask具有一个称为request的内置对象。在请求中有一个称为args的multidict。 您可以用来检索查询字符串的值。 当然,这需要一个get

  • 在Flask中处理文件上传非常简单。 它需要一个enctype属性设置为的HTML表单,将该文提交到指定URL。 URL处理程序从对象中提取文件并将其保存到所需的位置。 每个上传的文件首先保存在服务器上的临时位置,然后再保存到最终位置。 目标文件的名称可以是硬编码的,也可以从对象的属性中获取。 但是,建议使用函数获取它的安全版本。 可以在Flask对象的配置设置中定义默认上传文件夹的路径和上传文件

  • 我试图用PythonAnywhere和Flask编写一个非常简单的webapp,它允许用户上传文本文件,生成csv文件,然后让用户下载csv文件。不一定要花哨,只要管用就行了。我已经编写了从驱动器上的txt文件生成csv的程序。 现在,我的函数用以下命令打开驱动器上的文件:

  • 问题内容: 我正在使用matplotlib在Web应用程序中渲染某些图形。我以前只在运行脚本时使用过。但是,我需要一个函数来返回实际的“ .png”图像,以便可以使用HTML进行调用。 更多(可能不必要的)信息:我正在使用Python Flask。我认为我可以使用该图形并将其粘贴在我的静态文件夹中,然后从我的HTML中调用它,但是我宁愿每次都不要这样做。如果我可以仅创建图形,从中创建图像,返回该图

  • 问题内容: 我有一个端点,该端点在url中带有一个值,并产生一些将插入div的内容。我想使用JavaScript变量来构建url 。但是,是作为字符串而不是的值传递的。如何将JavaScript变量的值传递给? 问题答案: 您无法在Jinja中评估JavaScript。您正在尝试在Jinja呈现时在服务器端生成url,但您引用的变量仅在客户端浏览器上运行的JavaScript中可用。 在客户端上构

  • 问题内容: 有没有办法用Flask接收多个上传的文件?我尝试了以下方法: 然后打印内容 如果我上传多个文件,它将仅打印该集中的第一个文件: 是否可以使用Flask的内置上传处理方式接收多个文件?谢谢你的帮助! 问题答案: 你可以使用flask.request.files的方法getlist,例如: