golang http post获取上传文件信息

本文介绍了一种处理上传文件的方法,包括读取文件内容、获取文件大小、文件名,并使用MD5和SHA256进行内容加密。通过自定义结构体和函数,实现了文件信息的完整获取与安全加密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要是获取上传文件的内容、大小、名称以及md5内容加密和sha256内容加密,网上查找的资料很少,花费了挺长时间,记录以备后用

//FormFileInfo 上传文件的信息
type FormFileInfo struct {
    HashMd5  string `json:"hashMd5"`
    FileSize int64  `json:"fileSize"`
    FileName string `json:"fileName"`
    Sha256   string `json:"sha256"`
    Content  []byte `json:"content"`
}

//GetFormFile 获取上传文件信息
func GetFormFile(b *bytes.Buffer, form *multipart.Form, w *multipart.Writer) (FormFileInfo, error) {
    var res FormFileInfo
    for name, files := range form.File {
        for k, file := range files {
            if k == 0 {
                f, err := file.Open()
                if err != nil {
                    logging.Error(err)
                    return res, err
                }
                fileConent, err := ioutil.ReadAll(f)
                if err != nil {
                    logging.Error(err)
                    return res, err
                }
                res.Content = fileConent
                defer f.Close()
                fw, err := w.CreateFormFile(name, file.Filename)
                if err != nil {
                    logging.Error(err)
                    return res, err
                }
                if _, err = io.Copy(fw, f); err != nil {
                    logging.Error(err)
                    return res, err
                }
                res.FileName = file.Filename
                res.FileSize = file.Size
                hash := md5.New()
                hash.Write(fileConent)
                res.HashMd5 = base64.StdEncoding.EncodeToString(hash.Sum(nil))

                sh := sha256.New()
                sh.Write(fileConent)
                res.Sha256 = hex.EncodeToString(sh.Sum(nil))
            }
        }
    }
    w.Close() //要关闭,会将w.w.boundary刷写到w.writer中

    return res, nil
}

调用方式

var b bytes.Buffer
w := multipart.NewWriter(&b)
c.Request.ParseMultipartForm(2 << 20)
multiPartForm, _ := c.MultipartForm()
fileInfo, err := GetFormFile(&b, multiPartForm, w)
fmt.Println(fileInfo)

 

转载于:https://www.cnblogs.com/Dong-Ge/articles/11316445.html

Go 语言中发送 HTTP 请求上传文件通常涉及两个关键步骤:创建 HTTP 客户端,然后构建包含文件数据的multipart/form-data 部分。这里是一个简单的示例: ```go package main import ( "bytes" "fmt" "io/ioutil" "log" "net/http" ) // 文件上传函数 func uploadFile(url string, file multipart.File, filename string) error { // 创建一个HTTP POST请求 req, err := http.NewRequest("POST", url, nil) if err != nil { return err } // 设置Content-Type为multipart/form-data req.Header.Set("Content-Type", "multipart/form-data") // 将文件添加到请求体 body := &bytes.Buffer{} writer := multipart.NewWriter(body) part, err := writer.CreateFormFile("file", filename) // "file"是表单字段名 if err != nil { return err } _, err = io.Copy(part, file) if err != nil { return err } writer.Close() // 添加文件结束标记 req.Body = ioutil.NopCloser(writer) // 发起HTTP请求并处理响应 client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close() // 检查请求是否成功 if resp.StatusCode != http.StatusOK { log.Printf("Error uploading file: %s\n", resp.Status) return fmt.Errorf("upload failed with status code: %d", resp.StatusCode) } fmt.Println("File uploaded successfully") return nil } // 示例:读取本地文件上传 func main() { file, err := os.Open("path/to/local/file.txt") // 替换为实际文件路径 if err != nil { log.Fatal(err) } defer file.Close() // 上传到这个URL(替换为实际地址) url := "https://example.com/upload" err = uploadFile(url, file, "local_file.txt") // 使用文件名作为字段名 if err != nil { log.Fatal(err) } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值