{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import panel as pn\n", "pn.extension()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ``FileInput`` widget allows uploading one or more file from the frontend and makes the filename, file data and MIME type available in Python.\n", "\n", "For more information about listening to widget events and laying out widgets refer to the [widgets user guide](../../user_guide/Widgets.ipynb). Alternatively you can learn how to build GUIs by declaring parameters independently of any specific widgets in the [param user guide](../../user_guide/Param.ipynb). To express interactivity entirely using Javascript without the need for a Python server take a look at the [links user guide](../../user_guide/Param.ipynb).\n", "\n", "#### Parameters:\n", "\n", "For layout and styling related parameters see the [customization user guide](../../user_guide/Customization.ipynb).\n", "\n", "##### Core\n", "\n", "* **``accept``** (str): A list of file input filters that restrict what files the user can pick from\n", "* **``filename``** (str/list): The filename(s) of the uploaded file(s)\n", "* **``mime_type``** (str/list): The mime type(s) of the uploaded file(s)\n", "* **``multiple``** (boolean): Whether to allow uploading multiple files\n", "* **``value``** (bytes/list): A bytes object containing the file data or if `multiple` is set a list of bytes types.\n", "\n", "___" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file_input = pn.widgets.FileInput()\n", "\n", "file_input" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To read out the content of the file you can access the ``value`` parameter, which holds a bytestring containing the file's contents. Additionally information about the file type is made available on the ``filetype`` parameter expressed as a MIME type, e.g. ``image/png`` or ``text/csv``." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file_input.value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The widget also has a ``save`` method that allows saving the uploaded data to a file or BytesIO object." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "if file_input.value is not None:\n", " file_input.save('test.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `accept` parameter restricts what files the user can pick from. This consists of comma-separated list of standard HTML\n", "file input filters. Values can be:\n", "\n", "* `` - Specific file extension(s) (e.g: .gif, .jpg, .png, .doc) are pickable\n", "* `audio/*` - all sound files are pickable\n", "* `video/*` - all video files are pickable\n", "* `image/*` - all image files are pickable\n", "* `` - A valid [IANA Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml), with no parameters." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file_input = pn.widgets.FileInput(accept='.csv,.json')\n", "\n", "file_input" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To allow uploading multiple files we can also set `multiple=True`:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file_input = pn.widgets.FileInput(accept='.png', multiple=True)\n", "\n", "file_input" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When uploading one or more files the `filename`, `mime_type` and `value` parameters will now be lists. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Controls\n", "\n", "The `FileInput` widget exposes a number of options which can be changed from both Python and Javascript. Try out the effect of these parameters interactively:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pn.Row(file_input.controls(jslink=True), file_input)" ] } ], "metadata": { "language_info": { "name": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 4 }