Maison > développement back-end > Golang > le corps du texte

Golang comment créer un fichier à partir d'un tableau d'octets nodejs

WBOY
Libérer: 2024-02-09 11:39:29
avant
488 Les gens l'ont consulté

Golang comment créer un fichier à partir dun tableau doctets nodejs

L'éditeur php Banana vous présentera comment utiliser Golang pour créer des fichiers à partir de tableaux d'octets nodejs. Pendant le développement, nous devons souvent enregistrer des tableaux d'octets sous forme de fichiers. En utilisant Golang, nous pouvons accomplir cette tâche facilement. Tout d’abord, nous devons transférer le tableau d’octets nodejs vers le serveur Golang. Ensuite, utilisez la fonction WriteFile dans le package io/ioutil de Golang pour écrire le tableau d'octets dans le fichier. Avec cette méthode simple, nous pouvons implémenter la fonction de création de fichiers à partir du tableau d'octets nodejs. Ensuite, nous expliquons en détail les étapes et les exemples de code de ce processus. commençons!

Contenu de la question

Mon serveur go reçoit un tableau js via une requête de publication, et les données obtenues sont comme ceci

Comment l'écrire dans un fichier ?

Dans node.js, je peux faire ceci :

fs.writeFile(`${dir}/${body.file_name}`, Buffer.from(body.file), { flag: "w" }, function (err) {
        if (err) {
            console.log(err);
            return res.status(200).json({ 'status': 'error' });
        }
        console.log(`file sucessfully saved to "${dir}${body.file_name}"`);
        return res.status(200).json({ 'status': 'ok' });
    });
Copier après la connexion

Solution

Traduire go ligne par ligne produira les résultats suivants :

func handleincommingfile() http.handlerfunc {
    return func(w http.responsewriter, r *http.request) {
        if r.body == nil {
            log.println("body is empty")
            w.writeheader(http.statusbadrequest)
            w.write([]byte(`{ 'status': 'error' }`))
            return
        }

        body, err := io.readall(r.body)
        if err != nil {
            log.printf("reading body: %v", err)
            w.writeheader(http.statusinternalservererror)
            w.write([]byte(`{ 'status': 'error' }`))
            return
        }
        defer r.body.close()

        if err := os.writefile("path/to/filename.ext", body, 0644); err != nil {
            log.printf("writting content: %v", err)
            w.writeheader(http.statusinternalservererror)
            w.write([]byte(`{ 'status': 'error' }`))
            return
        }

        w.writeheader(http.statusok)
        w.write([]byte(`{ 'status': 'ok' }`))
    }
}
Copier après la connexion

Notez que je renvoie différents codes d'état http en fonction du contexte de l'erreur et qu'il manque des vérifications, par exemple si le fichier existe déjà.

De plus, je recommande d'injecter le service de stockage dans le gestionnaire pour le simplifier et déplacer la logique de création de fichiers vers un autre package.

func handleIncommingFile(store storage.Manager)  http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        if err := store.Save(r.Body); err != nil {
            w.WriteHeader(http.StatusInternalServerError)
            return
        }
        w.WriteHeader(http.StatusOK)
// ...
Copier après la connexion

Cela vous aidera à tester les gestionnaires et les tests de stockage :)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!