博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Golang模拟客户端POST表单功能文件上传
阅读量:5026 次
发布时间:2019-06-12

本文共 1290 字,大约阅读时间需要 4 分钟。

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

package mainimport (    "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 usagefunc main() {    target_url := "http://localhost/upload"    filename := "./example.pdf"    postFile(filename, target_url)}

转载于:https://www.cnblogs.com/Akkuman/p/golang-upload-file-with-httppost.html

你可能感兴趣的文章
POJ1258Agri-Net
查看>>
区域实现Android实现图片的裁剪(不调用系统功能)
查看>>
UVALive - 6039
查看>>
内容内核linux内核启动时R2的值来历
查看>>
UITextField弹出键盘挡住输入框问题
查看>>
地址栏显示图标 Shortcut Icon
查看>>
2018-2019 20165235《信息安全系统设计基础》第三周学习总结
查看>>
多队列网卡简介以及Linux通过网卡发送数据包源码解读
查看>>
LINUX高性能服务器编程
查看>>
海康设备网络SDK 编程
查看>>
HTML5语义标签的实践
查看>>
找出最大的那个字符或项!
查看>>
dotcms学习记录--建站-入门
查看>>
【 D3.js 进阶系列 — 6.1 】 缩放的应用(Zoom)
查看>>
基于visual Studio2013解决C语言竞赛题之1045打印成绩
查看>>
客服系统 rails 日志文件
查看>>
JSON运用——PHP中使用json数据格式定义字面量对象的方法
查看>>
error C2664: “GetModuleFileNameW”: 不能将参数 2 从“char [260]”转换为“LPWCH”
查看>>
66. Plus One
查看>>
[LeetCode] Count Binary Substrings
查看>>