为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
白猪掌柜的 2023-03-21 10:30:45
我的 go 服务器通过 post 请求接收一个 JS 数组,得到这样的数据我如何将其写入文件?在 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' });    });
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

逐行翻译 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 和存储测试 :)


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信