Uploading a file is a simple task. There are several ways to do it, and these different approaches have different effects on the so-called user experience: the way users perceive the application itself. Moreover, a better-implemented uploading feature can speed up the entire application, making things easier for the users. Let’s imagine that we want to upload a file containing text. It could be a .txt file, so a plain text file, but also a .docx file, a Microsoft Word file, or even a .pdf file. One approach is to ask the customer, what kind of file do you need to upload (.txtx, .docx, .pdf)? If the user replies .txt, the application will launch the file_uploader widget customized for this file format; if the answer is .docx, the file_uploader widget customized for Microsoft Word will be executed, and so on. This kind of approach works perfectly, but it’s a little bit too complex.