You might want to look at Nielsen Norman Groups work on response times:
Response Times: The 3 Important Limits
For slower operations: In cases where the computer cannot provide fairly immediate response, continuous feedback should be provided to the user in form of a percent-done indicator [Myers 1985]. As a rule of thumb, percent-done progress indicators should be used for operations taking more than about 10 seconds
For faster operations:
For reasonably fast operations, taking between 2 and 10 seconds, a true percent-done indicator may be overkill and, in fact, putting one up would violate the principle of display inertia (flashing changes on the screen so rapidly that the user cannot keep pace or feels stressed).
One question: can your application allow for users to continue work while the downloads prepare?
If so, you can treat it like a bottom right toast or snackbar, with a dismissible message in the case where you can set expectations for longer downloads, and assure users they can continue their work.
The have another article as well: Progress Indicators Make a Slow System Less Insufferable
They caution against Static Progress Indicators:
One final way to provide feedback is through a static progress indicator. This includes an unmoving image or text, such as “Loading…” or “Please wait while we process your request” to indicate that the request has been received.
While any feedback is better than none, static indicators should be replaced with another type of indicator, because they do not offer enough information about what is happening.
The main guideline is to use a looped indicator for delays of 2–9 seconds and a percent-done indicator for delays of 10 seconds or more.