Golang如何将Post请求接收的Node.js字节数组写入文件
Go 服务器接收POST数据并写入文件实现方案
核心逻辑说明
前端POST的JSON数据结构包含file_name(字符串)和file(字节数组),和你Node.js代码处理的结构一致。Go可按以下步骤实现:
- 定义结构体映射请求体:用结构体匹配前端传的JSON字段,通过
json标签确保字段名对应。 - 解析POST请求体:用
encoding/json包将请求的JSON数据解析到结构体实例。 - 写入文件:使用标准库
os的便捷方法或手动创建文件完成写入。 - 返回响应:根据写入结果返回对应的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
相关产品推荐
相关产品推荐

