J'essaie de diffuser des octets d'un fichier zip en utilisant la fonction io.Pipe() dans golang. J'utilise le lecteur de tuyaux pour lire les octets de chaque fichier dans le fichier zip, puis les diffuser et utiliser le graveur pour écrire les octets dans l'objet de réponse.Télécharger un fichier zip en utilisant io.Pipe() lecture/écriture golang
func main() {
r, w := io.Pipe()
// go routine to make the write/read non-blocking
go func() {
defer w.Close()
bytes, err := ReadBytesforEachFileFromTheZip()
err := json.NewEncoder(w).Encode(bytes)
handleErr(err)
}()
Ceci n'est pas une implémentation fonctionnelle mais une structure de ce que j'essaie d'atteindre. Je ne veux pas utiliser ioutil.ReadAll car le fichier va être très volumineux et Pipe() m'aidera à éviter de mettre toutes les données en mémoire. Quelqu'un peut-il aider avec une implémentation de travail en utilisant io.Pipe()?
Vous devez lire tout le fichier. 'zip.NewReader' prend un' io.ReaderAt', ce que vous ne pouvez pas faire avec un Pipe. – JimB
ne pouvait pas utiliser io.Copy (zipReader, w)? https://golang.org/pkg/io/#Copy –
@ mh-cbon Je ne suis pas sûr à 100%, mais pas io.Copie utiliser un tampon en dessous? Je voulais éviter ça. – psbits