Répondre

1

Le moyen le plus optimal sera l'enregistrement dans le compartiment de stockage, puis servez-le à partir de là.

Il vous permet également de:

  • préparer fichier à partir d'un travail TaskQueue, qui ne se limite pas à 60 secondes afin que vous puissiez traiter beaucoup plus de données, gérer les erreurs, etc
  • donner la capacité de l'utilisateur de faire une pause/reprendre le téléchargement, utilisez un gestionnaire de téléchargement, etc, w/o forcer votre frontend pour commencer le travail dès le début à chaque fois

Fondamentalement, je vous suggère:

  1. donner utilisateur un TicketID pour tâche d'envoi travail back-end
  2. à TaskQueue
  3. préparer les données dans ce travail de back-end, télécharger au stockage Bucket, définissez TicketID comme fait
  4. navigateur attend que TicketID est marqué comme fait (AJAX de l'API de canal)
  5. puis un servlet spécial donne ce fichier, à partir d'un stockage

Il sont deux options pour servir ce fichier ultérieurement:

(optimale) Donnez un lien direct vers l'objet Stockage:

ou en utilisant Blobstore:

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 
BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/<bucket>/<object>"); 
blobstoreService.serve(blobKey, resp); //where resp is your HttpServletResponse 
+0

Si le fichier ZIP est grand que je ne les mêmes problèmes avec le servlet de l'étape 5? – RCB

+1

non, si vous ne le copiez pas manuellement via le servlet. voir la réponse à la mise à jour –

+0

Ma tâche est annulée car j'obtiens un délai d'attente pour accéder à GCService. Les zip sont énormes. – RCB