• 使用gradio库的File模块实现文件上传和生成可下载文件


    使用gradio库的File模块实现文件上传和生成可下载文件

    一、背景

    在用Gradio设计改写效果审核AI的demo的时候,在网上以及官网检索了一下如何用gradio生成一个可以下载的文件,无果。遂躺了一下雷,记录一下躺雷过程。

    二、介绍

    1、gradio简介

    gradio是一个功能强大的Python库,用于构建交互式的机器学习和深度学习应用程序。其中的File模块提供了文件上传和展示的功能。

    2、File模块简介

    File模块是gradio库中的一个组件,用于创建一个文件组件,允许用户上传通用文件(用作输入)或显示通用文件(用作输出)。

    作为输入时,File模块将上传的文件作为tempfile._TemporaryFileWrapper或List[tempfile._TemporaryFileWrapper]传递给函数,具体取决于file_count参数的设置(或者是bytes/List[bytes],取决于type参数的设置)。

    作为输出时,File模块期望函数返回一个文件的路径(str类型),或者返回一个包含文件路径的列表(List[str])

    3、tempfile 模块

    tempfile 模块是 Python 标准库中的一个模块,用于创建临时文件和文件夹。它提供了一种在程序中创建临时文件和文件夹的简单方法,这些文件和文件夹可以在程序结束时自动删除,从而避免了在程序结束后手动清理临时文件的需要。

    tempfile 模块提供了许多函数和类,用于在不同的场景中创建临时文件和文件夹。例如:

    • tempfile.TemporaryFile():创建一个临时文件对象,该对象在关闭或程序结束时自动删除。
    • tempfile.TemporaryDirectory():创建一个临时文件夹,该文件夹在关闭或程序结束时自动删除。
    • tempfile.NamedTemporaryFile():创建一个带有指定名称的临时文件对象,该对象在关闭或程序结束时自动删除。
    • tempfile.mkstemp():创建一个带有唯一名称的临时文件,并返回其文件描述符和路径。
      您可以使用这些函数和类来创建和处理临时文件和文件夹,并在程序结束时自动删除它们,以避免在程序结束后出现残留文件的问题。

    三、文件上传demo实战

    1、具体代码

    下面是实现的具体代码

    import os
    
    import gradio as gr
    import tempfile
    import shutil
    def generate_file(file_obj):
        global tmpdir
        print('临时文件夹地址:{}'.format(tmpdir))
        print('上传文件的地址:{}'.format(file_obj.name)) # 输出上传后的文件在gradio中保存的绝对地址
    
        #获取到上传后的文件的绝对路径后,其余的操作就和平常一致了
    
        # 将文件复制到临时目录中
        shutil.copy(file_obj.name, tmpdir)
    
        # 获取上传Gradio的文件名称
        FileName=os.path.basename(file_obj.name)
    
        # 获取拷贝在临时目录的新的文件地址
        NewfilePath=os.path.join(tmpdir,FileName)
        print(NewfilePath)
    
        # 打开复制到新路径后的文件
        with open(NewfilePath, 'rb') as file_obj:
    
            #在本地电脑打开一个新的文件,并且将上传文件内容写入到新文件
            outputPath=os.path.join(tmpdir,"New"+FileName)
            with open(outputPath,'wb') as w:
                w.write(file_obj.read())
    
        # 返回新文件的的地址(注意这里)
        return outputPath
    def main():
        global tmpdir
        with tempfile.TemporaryDirectory(dir='.') as tmpdir:
            # 定义输入和输出
            inputs = gr.components.File(label="上传文件")
            outputs = gr.components.File(label="下载文件")
    
            # 创建 Gradio 应用程序g
            app = gr.Interface(fn=generate_file, inputs=inputs, outputs=outputs,   title="文件上传、并生成可下载文件demo",
                          description="上传任何文件都可以,只要大小别超过你电脑的内存即可"
          )
    
            # 启动应用程序
            app.launch(share=True)
    if __name__=="__main__":
        main()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    2、运行样例

    在这里插入图片描述
    在这里插入图片描述
    可以在这个拥抱脸网站测试:https://huggingface.co/spaces/white520/testCreateFile

  • 相关阅读:
    zzcase&接口自动化-质&效的探索
    生产问题 Recv-Q101
    项目管理软件中注释功能的作用是什么?
    JavaScript-手写every原理
    牛客题霸 -- 【模板】完全背包
    Prometheus-4:服务自动发现Service Discovery
    【效率提升】maven 转 gradle 实战 | 京东云技术团队
    二维凸包(Graham) 模板 + 详解
    JWT原理分析——JWT
    C#性能优化-树形结构递归优化
  • 原文地址:https://blog.csdn.net/qq_51116518/article/details/132628392