diff options
Diffstat (limited to 'vendor/github.com/nelsonken')
-rw-r--r-- | vendor/github.com/nelsonken/gomf/README.md | 37 | ||||
-rw-r--r-- | vendor/github.com/nelsonken/gomf/form_builder.go | 89 | ||||
-rw-r--r-- | vendor/github.com/nelsonken/gomf/up.php | 33 |
3 files changed, 159 insertions, 0 deletions
diff --git a/vendor/github.com/nelsonken/gomf/README.md b/vendor/github.com/nelsonken/gomf/README.md new file mode 100644 index 00000000..237e9370 --- /dev/null +++ b/vendor/github.com/nelsonken/gomf/README.md @@ -0,0 +1,37 @@ +# golang 可多文件上传的request builder 库 + +## 测试方法 + +1. start php upload server: php -S 127.0.0.1:8080 ./ +2. run go test -v + +## 使用方法 + +```go + fb := gomf.New() + fb.WriteField("name", "accountName") + fb.WriteField("password", "pwd") + fb.WriteFile("picture", "icon.png", "image/jpeg", []byte(strings.Repeat("0", 100))) + + log.Println(fb.GetBuffer().String()) + + req, err := fb.GetHTTPRequest(context.Background(), "http://127.0.0.1:8080/up.php") + if err != nil { + log.Fatal(err) + } + res, err := http.DefaultClient.Do(req) + + log.Println(res.StatusCode) + log.Println(res.Status) + + if err != nil { + log.Fatal(err) + } + + b, err := ioutil.ReadAll(res.Body) + if err != nil { + log.Fatal(err) + } + + log.Println(string(b)) +``` diff --git a/vendor/github.com/nelsonken/gomf/form_builder.go b/vendor/github.com/nelsonken/gomf/form_builder.go new file mode 100644 index 00000000..9b0d2294 --- /dev/null +++ b/vendor/github.com/nelsonken/gomf/form_builder.go @@ -0,0 +1,89 @@ +package gomf + +import ( + "bytes" + "context" + "fmt" + "mime/multipart" + "net/http" + "net/textproto" +) + +type FormBuilder struct { + w *multipart.Writer + b *bytes.Buffer +} + +func New() *FormBuilder { + buf := new(bytes.Buffer) + writer := multipart.NewWriter(buf) + return &FormBuilder{ + w: writer, + b: buf, + } +} + +func (ufw *FormBuilder) WriteField(name, value string) error { + w, err := ufw.w.CreateFormField(name) + if err != nil { + return err + } + + _, err = w.Write([]byte(value)) + if err != nil { + return err + } + + return nil +} + +// WriteFile if contentType is empty-string, will auto convert to application/octet-stream +func (ufw *FormBuilder) WriteFile(fieldName, fileName, contentType string, content []byte) error { + if contentType == "" { + contentType = "application/octet-stream" + } + + wx, err := ufw.w.CreatePart(textproto.MIMEHeader{ + "Content-Type": []string{ + contentType, + }, + "Content-Disposition": []string{ + fmt.Sprintf(`form-data; name="%s"; filename="%s"`, fieldName, fileName), + }, + }) + if err != nil { + return err + } + + _, err = wx.Write(content) + if err != nil { + return err + } + + return nil +} + +func (fb *FormBuilder) Close() error { + return fb.w.Close() +} + +func (fb *FormBuilder) GetBuffer() *bytes.Buffer { + return fb.b +} + +func (fb *FormBuilder) GetHTTPRequest(ctx context.Context, reqURL string) (*http.Request, error) { + err := fb.Close() + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", reqURL, fb.b) + if err != nil { + return nil, err + } + + req.Header.Set("Content-Type", fb.w.FormDataContentType()) + req = req.WithContext(ctx) + + return req, nil +} diff --git a/vendor/github.com/nelsonken/gomf/up.php b/vendor/github.com/nelsonken/gomf/up.php new file mode 100644 index 00000000..e56e5bbb --- /dev/null +++ b/vendor/github.com/nelsonken/gomf/up.php @@ -0,0 +1,33 @@ +<?php +/** + * + * PHP UPLOAD DEMO for gomf test + * USAGE: + * php -S 127.0.0.1:8080 -t ./ + * + */ + +print_r($_FILES); + +if ($_FILES["picture"]["error"] > 0) { + echo "Return Code: " . $_FILES["picture"]["error"] . "\n"; +} else { + echo "Upload: " . $_FILES["picture"]["name"] . "\n"; + echo "Type: " . $_FILES["picture"]["type"] . "\n"; + echo "Size: " . ($_FILES["picture"]["size"] / 1024) . " Kb\n"; + echo "Temp file: " . $_FILES["picture"]["tmp_name"] . "\n>"; + + if (file_exists($_FILES["picture"]["name"])) + { + echo $_FILES["picture"]["name"] . " already exists. \n"; + } + else + { + move_uploaded_file($_FILES["picture"]["tmp_name"], $_FILES["picture"]["name"]); + echo "Stored in: " . $_FILES["picture"]["name"] . "\n"; + } +} + + + + |