ZBLOG

package main import ( "encoding/base64" "fmt" "io/ioutil" "net/http" "os" ) func main() { http.HandleFunc("/upload", uploadHandler) err := http.ListenAndServe(":8888", nil) if err != nil { fmt.Println("Server error:", err) } } func u...

根据您提供的代码,可以通过修改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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=16678

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?