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

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

文章目录

一、背景

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

二、介绍

1、gradio简介

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

2、File模块简介

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

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

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

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()

2、运行样例


可以在这个拥抱脸网站测试:https://huggingface.co/spaces/white520/testCreateFile

相关推荐
笨鸟先飞,勤能补拙9 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能9 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂10 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study10 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境11 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境11 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12311 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy123931021612 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb0012 小时前
一个项目带你入门AI应用开发01
python
05664612 小时前
Python康复训练——常用标准库
开发语言·python·学习