12345678910111213141516171819202122232425262728293031323334353637 |
- import traceback
- import justpy as jp
- from typing import Awaitable, Callable, Optional, Union
- import base64
- from ..events import UploadEventArguments, handle_event
- from .element import Element
- class Upload(Element):
- def __init__(self,
- *,
- multiple: bool = False,
- on_upload: Optional[Union[Callable, Awaitable]] = None,
- ):
- """File Upload Element
- :param multiple: allow uploading multiple files at once (default: `False`)
- :param on_upload: callback to execute when a file is uploaded (list of bytearrays)
- """
- self.upload_handler = on_upload
- view = jp.Form(enctype='multipart/form-data', classes='flex gap-4 items-center',
- submit=lambda s, m: self.submit(s, m))
- jp.Input(type='file', multiple=multiple, a=view)
- jp.QButton(type='submit', text='Upload', color='primary', a=view)
- super().__init__(view)
- def submit(self, _, msg):
- try:
- for form_data in msg.form_data:
- if form_data.type == 'file':
- files = [base64.b64decode(f.file_content) for f in form_data.files]
- arguments = UploadEventArguments(sender=self, files=files)
- handle_event(self.upload_handler, arguments, update=self.parent_view)
- except Exception:
- traceback.print_exc()
|