Ho un'interfaccia utente e un server di backend .NET C # che comunicano tra loro. Ho una route /getBigFile
che l'interfaccia utente richiama un clic del pulsante, che il backend C # può richiedere fino a 60 secondi per creare e restituire in modo che l'utente possa scaricarlo. (Le dimensioni del file possono variare da 1 kB a 600 MB.)
Ciò significherebbe che l'interfaccia utente dovrebbe attendere con una connessione aperta finché C # non restituisce HttpResponse. Questo è ovviamente un cattivo progetto in quanto costringe l'utente a rimanere sulla pagina web fino a quando il file ritorna.
Ho pensato a diverse soluzioni per questo:
-
Trasmetti il file all'interfaccia utente in modo che il download inizi subito.
-
Il backend C # restituisce un httpResponse subito dopo l'avvio di un lavoro asincrono che crea il file, lo carica su S3 e invia il file via email in caso di successo / fallimento. (La parte del lavoro asincrono funzionerà anche se la connessione del server client è chiusa)
Non sono sicuro di quale sia il modo migliore. Il primo modo sembra la migliore scelta UX, ma quando più utenti richiedono file di grandi dimensioni, mi sento come se la seconda scelta venga gestita in modo migliore se la implemento con un meccanismo di Queuing (usando Amazon SQS o Redis. Non so davvero come questo funzionerà comunque.)
Non ho mai dovuto progettare qualcosa di simile e qualsiasi suggerimento e risorsa / guida sarebbe molto apprezzato!