You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang如何将Post请求接收的Node.js字节数组写入文件

Go 服务器接收POST数据并写入文件实现方案

核心逻辑说明

前端POST的JSON数据结构包含file_name(字符串)和file(字节数组),和你Node.js代码处理的结构一致。Go可按以下步骤实现:

  1. 定义结构体映射请求体:用结构体匹配前端传的JSON字段,通过json标签确保字段名对应。
  2. 解析POST请求体:用encoding/json包将请求的JSON数据解析到结构体实例。
  3. 写入文件:使用标准库os的便捷方法或手动创建文件完成写入。
  4. 返回响应:根据写入结果返回对应的JSON状态。

完整代码示例

package main

import (
	"encoding/json"
	"net/http"
	"os"
	"path/filepath"
)

// 匹配前端JSON结构的请求体结构体
type FileUploadRequest struct {
	FileName string `json:"file_name"`
	File     []byte `json:"file"`
}

func uploadHandler(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.MethodPost {
		http.Error(w, "仅支持POST请求", http.StatusMethodNotAllowed)
		return
	}

	// 解析请求体到结构体
	var req FileUploadRequest
	err := json.NewDecoder(r.Body).Decode(&req)
	if err != nil {
		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(http.StatusOK)
		json.NewEncoder(w).Encode(map[string]string{"status": "error", "msg": "请求体解析失败"})
		return
	}
	defer r.Body.Close()

	// 拼接目标文件路径,替换dir为你的实际存储目录
	dir := "./uploads"
	filePath := filepath.Join(dir, req.FileName)

	// 写入文件,os.WriteFile自动处理创建、写入、关闭流程,默认权限0644
	err = os.WriteFile(filePath, req.File, 0644)
	if err != nil {
		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(http.StatusOK)
		json.NewEncoder(w).Encode(map[string]string{"status": "error"})
		return
	}

	// 返回成功响应
	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(http.StatusOK)
	json.NewEncoder(w).Encode(map[string]string{"status": "ok"})
}

func main() {
	http.HandleFunc("/upload", uploadHandler)
	// 启动服务器监听8080端口
	http.ListenAndServe(":8080", nil)
}

关键细节补充

  • 结构体字段规则:Go结构体字段首字母必须大写(导出字段)才能被JSON解析器访问,json:"file_name"标签用于和前端小写的字段名对应。
  • 路径处理:用filepath.Join拼接路径,避免Windows/Linux路径分隔符不一致的问题。
  • 自定义写入控制:如果需要更精细的文件操作(比如追加写入、自定义权限),可以替换为os.OpenFile实现:
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
	// 错误处理逻辑
}
defer file.Close()
_, err = file.Write(req.File)

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:40:24