Skip to content

Instantly share code, notes, and snippets.

@mozillazg
Created December 17, 2014 05:33
Show Gist options
  • Save mozillazg/7bccc39499f2322ef1b6 to your computer and use it in GitHub Desktop.
Save mozillazg/7bccc39499f2322ef1b6 to your computer and use it in GitHub Desktop.

Revisions

  1. mozillazg created this gist Dec 17, 2014.
    73 changes: 73 additions & 0 deletions upload_file.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,73 @@
    package main

    import (
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "mime/multipart"
    "net/http"
    "os"
    )

    const upUrl string = "http://www.bild.me/index.php"

    func upload(url string, data map[string]string,
    paramname string, filename string,
    ) error {
    client := &http.Client{}
    bodyBuf := &bytes.Buffer{}
    bodyWriter := multipart.NewWriter(bodyBuf)

    fileWriter, err := bodyWriter.CreateFormFile(paramname, filename)
    if err != nil {
    fmt.Println("error writing to buffer")
    return err
    }

    f, err := os.Open(filename)
    if err != nil {
    fmt.Println("error open file")
    return err
    }

    _, err = io.Copy(fileWriter, f)
    if err != nil {
    return err
    }

    for k, v := range data {
    bodyWriter.WriteField(k, v)
    }

    contentType := bodyWriter.FormDataContentType()
    bodyWriter.Close()

    req, err := http.NewRequest("POST", url, bodyBuf)
    req.Header.Set("Content-Type", contentType)
    req.Header.Set("User-Agent", "go-bild/0.1.0")

    resp, err := client.Do(req)
    if err != nil {
    return err
    }
    defer resp.Body.Close()
    respBody, err := ioutil.ReadAll(resp.Body)
    if err != nil {
    return err
    }
    fmt.Println(resp.StatusCode)
    fmt.Println(string(respBody))
    return nil

    }

    func main() {
    data := map[string]string{
    "t": "1",
    "C1": "ON",
    "upload": "1",
    // "F1": "hello",
    }
    upload(upUrl, data, "F1", "up-download.jpg")
    }