2014/03/10

Recent entries from same category

  1. Microsoft Word を Markdown に変換するコマンド「docx2md」を作った。
  2. Go で大文字小文字無視の文字列比較ベンチマーク
  3. Go で型がインタフェースを実装している事を保証するには
  4. 改訂2版 みんなのGo言語
  5. Go のポインタの躓きやすい点

Twitter / ymmt2005: むう、mime/multipart の ...

むう、mime/multipart の CreateFormFile の Content-Type は application/octet-stream 固定になっている。泣ける。。#golang https://code.google.com/p/go/source/browse/src/pkg/mime/multipart/writer.go#128

https://twitter.com/ymmt2005/status/431143170659717120
ファイルから multipart.CreateFormFile を呼ぶと io.Writer が返ります。この writer は隠ぺいされているのでパートのヘッダを書き換える事は出来ません。
この場合は multipart.CreatePart を使います。
package main

import (
    "bytes"
    "io"
    "log"
    "mime/multipart"
    "net/textproto"
    "os"
)

func main() {
    var b bytes.Buffer
    w := multipart.NewWriter(&b)
    part := make(textproto.MIMEHeader)
    part.Set("Content-Type""application/vnd.ms-excel")
    part.Set("Content-Disposition"`form-data; name="file"; filename="Foo.xlsx"`)
    pw, err := w.CreatePart(part)
    if err != nil {
        log.Fatal(err)
    }
    f, err := os.Open("Foo.xlsx")
    if err != nil {
        log.Fatal(err)
    }
    io.Copy(pw, f)
    w.Close()

    b.WriteTo(os.Stdout)
}
Posted at by | Edit


blog comments powered by Disqus