1
votes

Autoriser le téléchargement d'un fichier à partir de mon point de terminaison REST à Golang en utilisant une API tierce

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.


0 commentaires

3 Réponses :


0
votes

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.


1 commentaires

S'il vous plaît, pouvez-vous donner un exemple.



0
votes

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.


0 commentaires

0
votes

vous pouvez le faire simplement avec l'aide de gin.Context.FileAttachment (chemin, nom de fichier)

accéder à cette réponse.


0 commentaires