Golang如何从nodejs字节数组创建文件

我的 go 服务器通过 post 请求接收一个 JS 数组,得到这样的数据

http://img.mukewang.com/641916f20001823705720050.jpg

我如何将其写入文件?


在 node.js 中我可以这样做:


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

    });


白猪掌柜的
浏览 97回答 1
1回答

LEATH

逐行翻译 go 会变成这样: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' }`))    }}请注意,我根据错误上下文返回不同的 HTTP 状态代码,并且缺少检查,例如,如果文件已经存在。此外,我建议向处理程序注入存储服务以简化它并将文件创建逻辑移动到另一个包。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)// ...这将帮助您测试 thandler 和存储测试 :)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go