根据您提供的代码,可以通过修改uploadHandler
函数来解析字符串格式的”info”字段。首先,将字符串转换为JSON对象,然后从中提取所需的字段。
以下是修改后的代码示例:
import (
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Info struct {
Alg string `json:"alg"`
Sign string `json:"sign"`
Version string `json:"version"`
}
func uploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
file, handler, err := r.FormFile("file")
if err != nil {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprint(w, "Failed to retrieve file from request.")
return
}
defer file.Close()
infoString := r.PostFormValue("info")
infoBytes, err := base64.StdEncoding.DecodeString(infoString)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprint(w, "Failed to decode info.")
return
}
var info Info
err = json.Unmarshal(infoBytes, &info)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprint(w, "Failed to parse info JSON.")
return
}
saveFile(file, handler.Filename)
saveInfo(&info)
fmt.Fprint(w, "File and info saved successfully.")
}
func saveInfo(info *Info) {
infoFilePath := "./info.txt"
infoData, err := json.MarshalIndent(info, "", "\t")
if err != nil {
fmt.Println("Failed to encode info:", err)
return
}
err = ioutil.WriteFile(infoFilePath, infoData, 0644)
if err != nil {
fmt.Println("Failed to save info:", err)
return
}
fmt.Println("Info saved:", infoFilePath)
}
在修改后的代码中,我创建了一个名为Info
的结构体类型来存储”info”字段的内容。然后,通过使用json.Unmarshal
将解码后的字节流转换为Info
对象。最后,将该对象保存到文件中。
请注意,在上述代码示例中,我还对错误进行了处理,并向HTTP响应写入适当的状态码和消息。
希望这可以帮助您调整解析方法并成功保存数据。如有任何问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问