zoukankan      html  css  js  c++  java
  • Golang模拟客户端POST表单功能文件上传

    客户端通过multipart.Write把文件的文本流写入一个缓存中,然后调用http的Post方法把缓存传到服务器。

    package main
    
    import (
        "bytes"
        "fmt"
        "io"
        "io/ioutil"
        "mime/multipart"
        "net/http"
        "os"
    )
    
    func postFile(filename string, targetUrl string) error {
        bodyBuf := &bytes.Buffer{}
        bodyWriter := multipart.NewWriter(bodyBuf)
    
        //关键的一步操作
        fileWriter, err := bodyWriter.CreateFormFile("uploadfile", filename)
        if err != nil {
            fmt.Println("error writing to buffer")
            return err
        }
    
        //打开文件句柄操作
        fh, err := os.Open(filename)
        if err != nil {
            fmt.Println("error opening file")
            return err
        }
        defer fh.Close()
    
        //iocopy
        _, err = io.Copy(fileWriter, fh)
        if err != nil {
            return err
        }
    
        contentType := bodyWriter.FormDataContentType()
        bodyWriter.Close()
    
        resp, err := http.Post(targetUrl, contentType, bodyBuf)
        if err != nil {
            return err
        }
        defer resp.Body.Close()
        resp_body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            return err
        }
        fmt.Println(resp.Status)
        fmt.Println(string(resp_body))
        return nil
    }
    
    // sample usage
    func main() {
        target_url := "http://localhost/upload"
        filename := "./example.pdf"
        postFile(filename, target_url)
    }
    
  • 相关阅读:
    springcloud有哪些特征
    可变参数
    递归
    增强的for循环
    Scanner对象
    注释
    Markdown常见的样式语法
    副本机制
    消费者分区分配策略
    SpringMVC 登陆判断
  • 原文地址:https://www.cnblogs.com/Akkuman/p/golang-upload-file-with-httppost.html
Copyright © 2011-2022 走看看