Maison  >  Article  >  développement back-end  >  Golang comment créer un fichier à partir d'un tableau d'octets nodejs

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

WBOY
WBOYavant
2024-02-09 11:39:29460parcourir

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' });
    });

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' }`))
    }
}

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)
// ...

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer