Cela peut sembler étrange, mais je développe un point de terminaison (REST) qui permet aux utilisateurs de télécharger le fichier (peut-être un zip). Donc, je frappe une API tierce pour obtenir le fichier, puis je dois le transmettre aux utilisateurs finaux.
Je ne peux pas exposer les API tierces. Je suis également assez nouveau dans les API Golang et REST. Je peux explorer le concept, mais tout le monde a une idée, quelle est la meilleure façon d'autoriser le téléchargement d'un fichier à partir de votre point de terminaison REST qui provient en fait d'un tiers.
Je sais que c'est une très mauvaise façon de poser une question, mais je n'ai aucune idée de ce que je dois explorer ou lire un blog qui me donne cette idée.
Je ne cherche pas de code, mais plutôt une idée.
3 Réponses :
Golang a l'abstraction de io.Reader
qui encapsule presque tout ce qui peut être lu au format binaire.
Habituellement, si vous avez un fichier provenant d'une API tierce, vous auriez au moins un moyen de créer un io.Reader
à partir de ce fichier, qu'il s'agisse d'une requête HTTP, d'un gRPC ou d'un fichier local. < / p>
Si vous avez votre io.Reader
, alors le demandeur fournira certainement un io.Writer
pour vous permettre d'écrire la réponse qu'il demande. Après ce point, tout ce que vous avez à faire est de relier io.Reader
et io.Writer
pour copier à la volée le fichier de l'API tierce vers le demandeur en utilisant < code> io.Copy ou io.CopyN
par exemple.
S'il vous plaît, pouvez-vous donner un exemple.
Ajout d'un extrait de code à ce que @Seaskyways a expliqué ci-dessus.
return middleware.ResponderFunc(func(w http.ResponseWriter, r runtime.Producer) { fn := filepath.Base(filePath) w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", fn)) io.Copy(w, file) defer os.Remove(filePath) file.Close() })
Cela peut vous aider.
vous pouvez le faire simplement avec l'aide de gin.Context.FileAttachment (chemin, nom de fichier)