{"id":33229796,"url":"https://github.com/fohrloop/dash-uploader","last_synced_at":"2025-11-21T11:02:48.199Z","repository":{"id":38002568,"uuid":"259146427","full_name":"fohrloop/dash-uploader","owner":"fohrloop","description":"The alternative upload component for python Dash applications.","archived":true,"fork":false,"pushed_at":"2025-07-19T18:43:41.000Z","size":2324,"stargazers_count":152,"open_issues_count":41,"forks_count":35,"subscribers_count":3,"default_branch":"dev","last_synced_at":"2025-10-11T13:57:42.819Z","etag":null,"topics":["dash","plotly-dash","python","python-3","python-dash","upload-file"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fohrloop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-04-26T22:28:09.000Z","updated_at":"2025-10-09T08:10:08.000Z","dependencies_parsed_at":"2025-07-19T20:26:30.816Z","dependency_job_id":"f7ff9900-d1af-4c1c-809b-17a89b4a747f","html_url":"https://github.com/fohrloop/dash-uploader","commit_stats":null,"previous_names":["np-8/dash-uploader"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/fohrloop/dash-uploader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fohrloop%2Fdash-uploader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fohrloop%2Fdash-uploader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fohrloop%2Fdash-uploader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fohrloop%2Fdash-uploader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fohrloop","download_url":"https://codeload.github.com/fohrloop/dash-uploader/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fohrloop%2Fdash-uploader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285603338,"owners_count":27200013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-21T02:00:06.175Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dash","plotly-dash","python","python-3","python-dash","upload-file"],"created_at":"2025-11-16T17:00:41.564Z","updated_at":"2025-11-21T11:02:48.194Z","avatar_url":"https://github.com/fohrloop.png","language":"Python","funding_links":[],"categories":["Component Libraries"],"sub_categories":[],"readme":"## 🚨 dash-uploader is archived 2025-07-19. See: [#153](https://github.com/fohrloop/dash-uploader/issues/153)\r\n--------\r\n\r\n![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/fohrloop/dash-uploader)\u0026nbsp;![PyPI](https://img.shields.io/pypi/v/dash-uploader)\u0026nbsp;![PyPI - Downloads](https://img.shields.io/pypi/dm/dash-uploader)\u0026nbsp;![GitHub](https://img.shields.io/github/license/fohrloop/dash-uploader)\r\n\r\n![upload large files with dash-uploader](docs/upload-demo.gif)\r\n\r\n# 📤 dash-uploader\r\nThe alternative upload component for [Dash](https://dash.plotly.com/) applications. \r\n\r\n\r\n## 📢 dash-uploader 0.7.0 pre-release available \r\n\r\n🎉 There is pre-release version of dash-uploader 0.7.0 available in PyPI! 🎉 \r\n\r\n```\r\npython -m pip install dash-uploader --pre\r\n```\r\n\r\n- It fixes the multi-file upload issues!  \r\n- Please, test it and give feedback to this [discussion](https://github.com/fohrloop/dash-uploader/discussions/88). \r\n\r\n\r\n\r\n## Table of contents\r\n- [Short summary](#short-summary)\r\n- [dash-uploader vs. dcc.Upload](#dash-uploader-vs-dccupload)\r\n- [Installing](#installing)\r\n- [Quickstart](#quickstart)\r\n  - [Simple example](#simple-example)\r\n  - [Example with callback](#example-with-callback-and-other-options)\r\n- [Contributing](#contributing)\r\n- [Documentation](#documentation)\r\n- [Changelog](#changelog)\r\n- [Credits](#credits)\r\n\r\n## Short summary\r\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; 💾 Data file size has no limits. (Except the hard disk size)\u003cbR\u003e\r\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; ☎ Call easily a callback after uploading is finished.\u003cbr\u003e\r\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; 📤 Upload files using [flow.js](https://github.com/flowjs/flow.js/) \u003cbr\u003e\r\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; 📦 All JS and CSS bundled with the package. No need for network calls for CSS/JS.\u003cbr\u003e\r\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; ✅ Works with Dash 1.1.0.+ \u0026 Python 3.6+. (Possibly with other versions, too)\u003cbr\u003e\r\n\r\n\r\n### dash-uploader vs. [dcc.Upload](https://dash.plotly.com/dash-core-components/upload)\r\n\r\n\r\n\r\n\r\n\r\n|                       | dash-uploader                                      | [dcc.Upload](https://dash.plotly.com/dash-core-components/upload)                                                                                                                    |\r\n| --------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\r\n| Underlying technology | [flow.js](https://github.com/flowjs/flow.js/)      | HTML5 API                                                                                                                                                                            |\r\n| File size             | Unlimited                                          | max ~150-200MB ([link](https://community.plotly.com/t/dash-upload-component-decoding-large-files/8033/11))                                                                           |\r\n| Uploads to            | Hard disk (server side)                            | First to browser memory (user side) Then, to server using callbacks.                                                                                                                 |\r\n| Data type             | Uploaded as file; no need to parse at server side. | Uploaded as byte64 encoded string  -\u003e Needs parsing                                                                                                                                  |\r\n| See upload progress?  | Progressbar out of the box                         | No upload indicators out of the box. Generic loading indicator possible. [Progressbar not possible](https://community.plotly.com/t/upload-after-confirmation-and-progress-bar/7172). |\r\n\r\n# Installing\r\n```\r\npip install dash-uploader\r\n```\r\n\r\n# Quickstart\r\n\r\nFull documentation [here](docs/dash-uploader.md) \r\n\u003e⚠️**Security note**: The Upload component allows POST requests and uploads of arbitrary files to the server harddisk and one should take this into account (with user token checking etc.) if used as part of a public website! For this you can utilize the  `http_request_handler` argument of the [du.configure_upload](https://github.com/fohrloop/dash-uploader/blob/master/docs/dash-uploader.md#duconfigure_upload). (New in version 0.5.0)\r\n\r\n## Simple example\r\n\r\n```python\r\nimport dash\r\nimport dash_html_components as html\r\nimport dash_uploader as du\r\n\r\napp = dash.Dash(__name__)\r\n\r\n# 1) configure the upload folder\r\ndu.configure_upload(app, r\"C:\\tmp\\Uploads\")\r\n\r\n# 2) Use the Upload component\r\napp.layout = html.Div([\r\n    du.Upload(),\r\n])\r\n\r\nif __name__ == '__main__':\r\n    app.run_server(debug=True)\r\n\r\n```\r\n\r\n## Example with callback (and other options)\r\n- **New in version 0.7.0:** Functions decorated with [`@du.callback`](https://github.com/fohrloop/dash-uploader/blob/dev/docs/dash-uploader.md#ducallback) must take `status` ([`du.UploadStatus`](https://github.com/fohrloop/dash-uploader/blob/dev/docs/dash-uploader.md#duuploadstatus)) object as the only input parameter (previously, `filenames`)\r\n\r\n\r\n```python\r\nfrom pathlib import Path\r\nimport uuid\r\n\r\nimport dash_uploader as du\r\nimport dash\r\nimport dash_html_components as html\r\nfrom dash.dependencies import Input, Output, State\r\n\r\napp = dash.Dash(__name__)\r\n\r\nUPLOAD_FOLDER_ROOT = r\"C:\\tmp\\Uploads\"\r\ndu.configure_upload(app, UPLOAD_FOLDER_ROOT)\r\n\r\ndef get_upload_component(id):\r\n    return du.Upload(\r\n        id=id,\r\n        max_file_size=1800,  # 1800 MB\r\n        filetypes=['csv', 'zip'],\r\n        upload_id=uuid.uuid1(),  # Unique session id\r\n    )\r\n\r\n\r\ndef get_app_layout():\r\n\r\n    return html.Div(\r\n        [\r\n            html.H1('Demo'),\r\n            html.Div(\r\n                [\r\n                    get_upload_component(id='dash-uploader'),\r\n                    html.Div(id='callback-output'),\r\n                ],\r\n                style={  # wrapper div style\r\n                    'textAlign': 'center',\r\n                    'width': '600px',\r\n                    'padding': '10px',\r\n                    'display': 'inline-block'\r\n                }),\r\n        ],\r\n        style={\r\n            'textAlign': 'center',\r\n        },\r\n    )\r\n\r\n\r\n# get_app_layout is a function\r\n# This way we can use unique session id's as upload_id's\r\napp.layout = get_app_layout\r\n\r\n\r\n@du.callback(\r\n    output=Output(\"callback-output\", \"children\"),\r\n    id=\"dash-uploader\",\r\n)\r\ndef callback_on_completion(status: du.UploadStatus):\r\n    return html.Ul([html.Li(str(x)) for x in status.uploaded_files])\r\n\r\n\r\n\r\nif __name__ == '__main__':\r\n    app.run_server(debug=True)\r\n\r\n```\r\n\r\n\r\n## Contributing\r\n\r\n\r\n| What?                                | How?                                                                                                                                                                                                                                         |\r\n| :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| 🐞 Found a bug?                       | 🎟 \u003ca href=\"https://github.com/fohrloop/dash-uploader/issues\"\u003eFile an Issue\u003c/a\u003e                                                                                                                                                                   |\r\n| 🙋‍♂️ Need help?                         | ❔  \u003ca href=\"https://stackoverflow.com/questions/ask\"\u003eAsk a question on StackOverflow\u003c/a\u003e \u003cbr\u003e\u003ca href=\"https://community.plotly.com/t/show-and-tell-dash-uploader-upload-large-files/38451\"\u003e📧 Use this thread on community.plotly.com\u003c/a\u003e     |\r\n| 💡  Want to submit a feature request? | \u003ca href=\"https://community.plotly.com/t/show-and-tell-dash-uploader-upload-large-files/38451\"\u003e🎭 Discuss about it on community.plotly.com\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://github.com/fohrloop/dash-uploader/issues\"\u003e🎫 File an Issue (feature request)\u003c/a\u003e |\r\n| 🧙  Want to write code?               | 🔥 \u003ca href=\"./docs/CONTRIBUTING.md\"\u003eHere's how you get started!\u003c/a\u003e                                                                                                                                                                           |\r\n## Documentation\r\n- [Documentation](docs/dash-uploader.md)\r\n- [Developer documentation](docs/CONTRIBUTING.md)\r\n- [Migration Guide](https://github.com/fohrloop/dash-uploader/wiki/Migration-Guide)\r\n\r\n## Changelog\r\n\r\n- [Changelog](./docs/CHANGELOG.md)\r\n## Credits\r\n- History: This package is based on the React 16 compatible version [dash-resumable-upload](https://github.com/westonkjones/dash-resumable-upload) (0.0.4) by [Weston Jones](https://github.com/westonkjones/) which in turn is based on [dash-resumable-upload](https://github.com/rmarren1/dash-resumable-upload) (0.0.3) by [Ryan Marren](https://github.com/rmarren1) \r\n- The package boilerplate is taken from the [dash-component-boilerplate](https://github.com/plotly/dash-component-boilerplate).\r\n- The uploading JS function utilizes the [flow.js](https://github.com/flowjs/flow.js/) (2.14.x).\r\n- The JS component is created using [React](https://github.com/facebook/react) (17.0.x)\r\n- The CSS styling is mostly from [Bootstrap](https://getbootstrap.com/) 4.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffohrloop%2Fdash-uploader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffohrloop%2Fdash-uploader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffohrloop%2Fdash-uploader/lists"}