Bring Drag & Drop to Dash with Dashboard Engine. 💫 Learn how at our next webinar!

Reset/empty data in dcc.Upload

Hi all. I am new to Dash and so far have enjoyed the technology and learning process very much! I have an app that does a complicated calculation based on three uploads via dcc.Upload. The uploads and calculation all work as expected. The issue is that I do not understand the “canonical” method for basically resetting the data. That is, how do I reset the app to its initial empty state? Thanks alot for the opportunity to ask technical questions!

For reference, the upload layout is standard:

   dcc.Upload(
      id='upload-data1',
      children=html.Div(['Drag & Drop or ',html.A('Select ZMA File')]),
      style=style_upload,
      multiple=False
   ),
   dcc.Upload(
      id='upload-data2',
      children=html.Div(['Drag & Drop or ',html.A('Select ZMA File')]),
      style=style_upload,
      multiple=False
   ),
   dcc.Upload(
      id='upload-data3',
      children=html.Div(['Drag & Drop or ',html.A('Select ZMA File')]),
      style=style_upload,
      multiple=False
   ),

The callback looks like this:

@app.callback(Output('output-tabs','children'),
              [Input('upload-data1','contents'),
               Input('upload-data2','contents'),
               Input('upload-data3','contents')],
              [State('upload-data1','filename'),
               State('upload-data2','filename'),
               State('upload-data3','filename')])
def update_output(c1,c2,c3,f1,f2,f3):
   c = [] ; f = []
   if c1 is not None:
      c.append(c1) ; f.append(f1)
      if c2 is not None:
         c.append(c2) ; f.append(f2)
         if c3 is not None:
            c.append(c3) ; f.append(f3) 
   return do_calculation(c,f)
2 Likes

I also have that problem. When uploading many files, the files are all held in memory sometimes even bringing down the host. It would be nice to be able to empty the ram after the files have been processed.