code: func (this *FCGIClient) PostFile(p map[string]string, data url.Values, file map[string]string) (resp *http.Response, err error) {
  	buf := &bytes.Buffer{}
  	writer := multipart.NewWriter(buf)
  	bodyType := writer.FormDataContentType()
  
  	for key, val := range data {
  		for _, v0 := range val {
  			err = writer.WriteField(key, v0)
  			if err != nil {
  				return
  			}
  		}
  	}
  
  	for key, val := range file {
  		fd, e := os.Open(val)
  		if e != nil {
  			return nil, e
  		}
  		defer fd.Close()
  
  		part, e := writer.CreateFormFile(key, filepath.Base(val))
  		if e != nil {
  			return nil, e
  		}
  		_, err = io.Copy(part, fd)
  	}
  
  	err = writer.Close()
  	if err != nil {
  		return
  	}
  
  	return this.Post(p, bodyType, buf, buf.Len())
  }
docs: // PostFile issues a POST to the fcgi responder in multipart(RFC 2046) standard,
  // with form as a string key to a list values (url.Values),
  // and/or with file as a string key to a list file path.