FormFile を使えばおk。
func handler(w http.ResponseWriter, r *http.Request) {
file, reader, err := r.FormFile("パラメータ名")
...
}
file にmultipart.File型でopenされたものが入ります。こいつから読み込んでやればOK
詳細は以下当たりを参照
例
例として、wavファイル受け取ってparseするコード書いた。wavの読み込みに使うライブラリは予めインストールしておく。
$ go get github.com/mjibson/go-dsp/wav
audioHandler.go
package main
import (
"encoding/json"
"net/http"
"github.com/mjibson/go-dsp/wav"
)
type AudioInfo struct {
Filename string
SampleRate int
NumChannels int
Duration float64
}
func audiohandler(w http.ResponseWriter, r *http.Request) {
file, reader, err := r.FormFile("audio")
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
defer file.Close()
wav, werr := wav.ReadWav(file)
if werr != nil {
http.Error(w, werr.Error(), http.StatusInternalServerError)
return
}
audio := AudioInfo{
reader.Filename,
int(wav.SampleRate),
int(wav.NumChannels),
float64(len(wav.Data[0]))/float64(wav.SampleRate)}
js, jerr := json.Marshal(audio)
if jerr != nil {
http.Error(w, jerr.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(js)
}
func main() {
http.HandleFunc("/file", audiohandler)
http.ListenAndServe(":9999", nil)
}
試す
Server
$ go run audioHandler.go
Client
$ curl -i -X POST -F 'audio=@/path/to/file.wav' localhost:9999/file
結果
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Content-Type: application/json
Date: Sun, 26 Jan 2014 15:21:20 GMT
Content-Length: 79
{"Filename":"ファイル名.wav","SampleRate":44100,"NumChannels":2,"Duration":29.0765}
簡単ですね。C++捨ててGoerになる