博主原文链接:https://www.yourmetaverse.cn/nlp/442/

利用Gradio的UploadButton模块实现文件上传功能
本文介绍了Gradio库中的UploadButton模块及其click和upload方法。UploadButton模块可以用于创建一个文件上传按钮,用户可以通过点击按钮来上传文件。本文将详细介绍UploadButton模块的参数和行为,并给出了示例代码和方法的详细说明。
在现代Web应用程序中,文件上传是一个常见的功能需求。Gradio库是一个用于构建交互式界面的Python库,其中的UploadButton模块提供了一个简单而强大的文件上传功能。通过使用UploadButton模块,开发者可以轻松地在Gradio应用程序中添加文件上传功能。
1. UploadButton模块介绍
UploadButton模块是Gradio库中的一个组件,用于创建一个文件上传按钮。用户可以通过点击按钮来选择并上传文件。下面是UploadButton模块的一些重要参数和行为:
-  
参数:
- label:按钮上显示的文本,默认为"Upload a File"。
 - value:默认要上传的文件或文件列表。
 - variant:按钮的样式,可以是’primary’、‘secondary’或’stop’。
 - visible:指定组件是否可见,默认为True。
 - size:按钮的大小,可以是’sm’或’lg’。
 - scale:相对于相邻组件的宽度比例。
 - min_width:最小像素宽度,如果屏幕空间不足以满足此值,则会换行。
 - interactive:指定按钮是否可交互,默认为True。
 - elem_id:组件在HTML DOM中的id。
 - elem_classes:组件在HTML DOM中的类。
 
 -  
行为:
- 输入:将上传的文件作为文件对象或文件对象列表传递给后续处理函数。
 - 输出:期望函数返回文件的路径字符串或路径字符串列表。
 
 
2. click方法
click方法是UploadButton模块的一个监听器方法,当点击按钮时触发该方法。click方法可以在Gradio Blocks中使用,用于将函数包装成一个接口。
- 参数: 
  
- fn:要包装的函数,通常是一个机器学习模型的预测函数。
 - inputs:作为输入的组件列表。
 - outputs:作为输出的组件列表。
 - api_name:在API文档中显示的端点名称。
 - status_tracker:状态跟踪器对象。
 - scroll_to_output:是否在完成后滚动到输出组件。
 - show_progress:是否显示进度动画。
 - queue:是否将请求放入队列中。
 - batch:是否处理一批输入。
 - max_batch_size:批处理的最大输入数量。
 - preprocess:是否在运行函数之前运行组件数据的预处理。
 - postprocess:是否在返回函数输出之前运行组件数据的后处理。
 - cancels:需要取消的其他事件列表。
 - every:在客户端连接打开时每隔一定时间运行一次。
 
 
3. upload方法
upload方法是UploadButton模块的另一个监听器方法,当用户上传文件到组件时触发该方法。upload方法也可以在Gradio Blocks中使用。
- 参数: 
  
- fn:要包装的函数,通常是一个机器学习模型的预测函数。
 - inputs:作为输入的组件列表。
 - outputs:作为输出的组件列表。
 - api_name:在API文档中显示的端点名称。
 - status_tracker:状态跟踪器对象。
 - scroll_to_output:是否在完成后滚动到输出组件。
 - show_progress:是否显示进度动画。
 - queue:是否将请求放入队列中。
 - batch:是否处理一批输入。
 - max_batch_size:批处理的最大输入数量。
 - preprocess:是否在运行函数之前运行组件数据的预处理。
 - postprocess:是否在返回函数输出之前运行组件数据的后处理。
 - cancels:需要取消的其他事件列表。
 - every:在客户端连接打开时每隔一定时间运行一次。
 
 
4. 示例代码和用法
下面是一个使用UploadButton模块的示例代码:
import gradio as gr
def upload_file(files):
    file_paths = [file.name for file in files]
    return file_paths
with gr.Blocks() as demo:
    file_output = gr.File()
    upload_button = gr.UploadButton("Click to Upload a File", file_types=["image", "video"], file_count="multiple")
    upload_button.upload(upload_file, upload_button, file_output)
demo.launch()
 
在这个示例中,我们创建了一个Gradio应用程序,包含一个文件输出组件(file_output)和一个UploadButton组件(upload_button)。当用户点击UploadButton组件并选择要上传的文件后,会触发upload_file函数来处理上传的文件。upload_file函数将返回上传文件的路径列表,并将其作为输出展示在文件输出组件中。
参数详解
UploadButton
| 参数 | 数据类型 | 默认值 | 描述 | 
|---|---|---|---|
| label | str | “Upload a File” | 按钮上显示的文本 | 
| value | str | list[str] | Callable | None | None | 默认要上传的文件或文件列表 | 
| variant | Literal[‘primary’, ‘secondary’, ‘stop’] | “secondary” | 按钮样式:'primary’为主要样式,'secondary’为次要样式,'stop’为停止按钮样式 | 
| visible | bool | True | 是否显示组件 | 
| size | Literal[‘sm’, ‘lg’] | None | None | 按钮的尺寸:可以是"sm"(小尺寸)或"lg"(大尺寸) | 
| scale | int | None | None | 相对于相邻组件的宽度比例。例如,如果组件A的scale=2,组件B的scale=1,则组件A的宽度是组件B的两倍。必须是整数。 | 
| min_width | int | None | None | 最小像素宽度,如果屏幕空间不足以满足此值,将换行。如果某个scale值导致该组件比min_width更窄,则优先考虑min_width参数。 | 
| interactive | bool | True | 如果为False,UploadButton将处于禁用状态。 | 
| elem_id | str | None | None | 可选字符串,作为该组件在HTML DOM中的id分配。可用于定位CSS样式。 | 
| elem_classes | list[str] | str | None | None | 可选的字符串列表,作为该组件在HTML DOM中的类分配。可用于定位CSS样式。 | 
| type | Literal[‘file’, ‘bytes’] | “file” | 组件返回的值的类型。"file"返回与上传文件具有相同基本名称的临时文件对象,其完整路径可以通过file_obj.name检索;"bytes"返回一个字节对象。 | 
| file_count | Literal[‘single’, ‘multiple’, ‘directory’] | “single” | 如果是"single",允许用户上传一个文件;如果是"multiple",允许用户上传多个文件;如果是"directory",允许用户上传所选目录中的所有文件。返回类型将根据"multiple"或"directory"的情况而定,分别返回每个文件的列表。 | 
| file_types | list[str] | None | None | 要上传的文件类型列表。"file"允许上传任何类型的文件;"image"只允许上传图像文件;"audio"只允许上传音频文件;"video"只允许上传视频文件;"text"只允许上传文本文件。 | 
click方法
| 参数 | 数据类型 | 默认值 | 描述 | 
|---|---|---|---|
| fn | Callable | None | 必需 | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或元组,其中每个元素对应一个输出组件。 | 
| inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,这应该是一个空列表。 | 
| outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,这应该是一个空列表。 | 
| api_name | str | None | Literal[False] | None | 定义端点在API文档中的显示方式。可以是字符串、None或False。如果为False,端点将不会在API文档中显示。如果设置为None,端点将以无名端点的形式显示在API文档中,尽管此行为将在Gradio 4.0中更改。如果设置为字符串,端点将以给定的名称显示在API文档中。 | 
| status_tracker | None | None | |
| scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 | 
| show_progress | Literal[‘full’, ‘minimal’, ‘hidden’] | “full” | 如果为True,在等待期间显示进度动画。 | 
| queue | bool | None | None | 如果为True,在队列中排队请求(如果启用了队列)。如果为False,即使启用了队列,也不会将此事件放入队列中。如果为None,则使用gradio应用程序的队列设置。 | 
| batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表应具有相等的长度(最多为max_batch_size长度)。然后函数必须返回一个元组的列表(即使只有一个输出组件),其中元组中的每个列表对应一个输出组件。 | 
| max_batch_size | int | 4 | 如果从队列中调用,将一起批处理的最大输入数量(仅当batch=True时相关) | 
| preprocess | bool | True | 如果为False,将不会在运行’fn’之前运行组件数据的预处理(例如,如果使用Image组件调用此方法,则保留为base64字符串)。 | 
| postprocess | bool | True | 如果为False,将不会在将’fn’的输出返回给浏览器之前运行组件数据的后处理。 | 
| cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当此侦听器被触发时,取消其他事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 | 
| every | float | None | None | 在客户端连接打开时,每隔多少秒运行此事件。以秒为单位解释。必须启用队列。 | 
upload方法
| 参数 | 数据类型 | 默认值 | 描述 | 
|---|---|---|---|
| fn | Callable | None | 必需 | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或元组,其中每个元素对应一个输出组件。 | 
| inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,这应该是一个空列表。 | 
| outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,这应该是一个空列表。 | 
| api_name | str | None | Literal[False] | None | 定义端点在API文档中的显示方式。可以是字符串、None或False。如果为False,端点将不会在API文档中显示。如果设置为None,端点将以无名端点的形式显示在API文档中,尽管此行为将在Gradio 4.0中更改。如果设置为字符串,端点将以给定的名称显示在API文档中。 | 
| status_tracker | None | None | |
| scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 | 
| show_progress | Literal[‘full’, ‘minimal’, ‘hidden’] | “full” | 如果为True,在等待期间显示进度动画。 | 
| queue | bool | None | None | 如果为True,在队列中排队请求(如果启用了队列)。如果为False,即使启用了队列,也不会将此事件放入队列中。如果为None,则使用gradio应用程序的队列设置。 | 
| batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表应具有相等的长度(最多为max_batch_size长度)。然后函数必须返回一个元组的列表(即使只有一个输出组件),其中元组中的每个列表对应一个输出组件。 | 
| max_batch_size | int | 4 | 如果从队列中调用,将一起批处理的最大输入数量(仅当batch=True时相关) | 
| preprocess | bool | True | 如果为False,将不会在运行’fn’之前运行组件数据的预处理(例如,如果使用Image组件调用此方法,则保留为base64字符串)。 | 
| postprocess | bool | True | 如果为False,将不会在将’fn’的输出返回给浏览器之前运行组件数据的后处理。 | 
| cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当此侦听器被触发时,取消其他事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 | 
| every | float | None | None | 在客户端连接打开时,每隔多少秒运行此事件。以秒为单位解释。必须启用队列。 | 
结论
本文介绍了Gradio库中的UploadButton模块及其click和upload方法。通过使用UploadButton模块,开发者可以轻松地在Gradio应用程序中添加文件上传功能。通过详细了解UploadButton模块的参数和行为,并结合示例代码,开发者可以更好地理解和使用这一功能强大的组件。希望本文对你有所帮助,祝你在使用Gradio的过程中取得成功!



















