From 2d5640d3c8c027da4b2e868df9d9cf6e42554287 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期五, 20 十一月 2020 11:20:39 +0800 Subject: [PATCH] 返回的weedPath文件路径中携带请求url中?后的参数 --- WeedFSClient.go | 111 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 98 insertions(+), 13 deletions(-) diff --git a/WeedFSClient.go b/WeedFSClient.go index 6556d1f..ce5d0f4 100644 --- a/WeedFSClient.go +++ b/WeedFSClient.go @@ -6,13 +6,14 @@ "errors" "fmt" "io" - "log" "mime/multipart" "net/http" + "github.com/kirinlabs/HttpRequest" + "strings" "time" ) -func UploadFile(uri string, fileName string, fileData []byte) (weedFilePath string, err error) { +func UploadFile(uri string, fileName string, fileData []byte,timeout time.Duration) (weedFilePath string, err error) { body := &bytes.Buffer{} writer := multipart.NewWriter(body) _, err = writer.CreateFormFile("file", fileName) @@ -28,11 +29,13 @@ //writer.WriteField(key, val) request, err := http.NewRequest("POST", uri, request_reader) request.Header.Add("Content-Type", writer.FormDataContentType()) - timeout := time.Duration(5 * time.Second) //瓒呮椂鏃堕棿50ms + if timeout <=0 { + timeout = 5 * time.Second + } client := &http.Client{Timeout: timeout} resp, err := client.Do(request) if err != nil { - log.Fatal(err) + fmt.Println("UploadFile client.Do(request) err:", err) return "", err } defer func() { @@ -55,7 +58,7 @@ body := &bytes.Buffer{} _, err := body.ReadFrom(resp.Body) if err != nil { - log.Fatal(err) + fmt.Println("UploadFile body.ReadForm(resp.Body) err:", err) } m := make(map[string]interface{}) @@ -63,13 +66,95 @@ return "", err } filePath := m["fileUrl"].(string) - return filePath,nil - //if strings.Contains(filePath,"/"){ - // idx := strings.Index(filePath,"/") - // filePath = filePath[idx+1:] - // return filePath,nil - //} else { - // return "",errors.New("file upload error") - //} + + return appendCollection2Uri(uri, filePath),nil + } +} + +func appendCollection2Uri(weedfsUri, fileUri string) string { + //鍒ゆ柇weedfsUri涓槸鍚﹀寘鍚玞ollection鍙傛暟 + idx := strings.Index(weedfsUri, "?") + if idx > -1 { + return fileUri + weedfsUri[idx:] + } else { + return fileUri + } +} + +// 鑾峰緱涓�涓猣id url eg:http://192.168.5.23:6333/assign/dir?collection=11111-persistent +func GetFid(url string)(weedPath string ,err error) { + res,err := HttpRequest.NewRequest().Post(url) + if err != nil { + fmt.Println("缃戠粶浼犺緭閿欒锛�") + return "", err + } + var m map[string]interface{} + err = res.Json(&m) + if err != nil { + return "",err + } + u,ok1 := m["url"] + f,ok2 := m["fid"] + if ok1 && ok2 { + filePath := "http://"+u.(string)+"/"+f.(string) + return appendCollection2Uri(url, filePath),err + } else { + return "", errors.New("鏈幏鍙栧埌url鍜宖id") + } +} + +func UpDateFile(uri string, fileName string, fileData []byte,timeout time.Duration) (m map[string]interface{}, err error) { + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + _, err = writer.CreateFormFile("file", fileName) + if err != nil { + return nil, err + } + boundary := writer.Boundary() + //close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary) + close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary)) + file := bytes.NewBuffer(fileData) + request_reader := io.MultiReader(body, file, close_buf) + //_, err = io.Copy(part, file) + //writer.WriteField(key, val) + request, err := http.NewRequest("POST", uri, request_reader) + request.Header.Add("Content-Type", writer.FormDataContentType()) + if timeout <= 0 { + timeout = time.Duration(5 * time.Second) //瓒呮椂鏃堕棿5s + } + client := &http.Client{Timeout: timeout} + resp, err := client.Do(request) + if err != nil { + fmt.Println("UploadFile client.Do(request) err:", err) + return nil, err + } + defer func() { + if r := recover(); r != nil { + fmt.Printf("panic鐨勫唴瀹�%v\n", r) + msg := "涓婁紶鍥剧墖鏈嶅姟鍣ㄥ紓甯�" + if _, ok := r.(error); ok { + msg = r.(error).Error() + fmt.Println("panic--recover()寰楀埌鐨勬槸error绫诲瀷") + } + if _, ok := r.(string); ok { + msg = r.(string) + fmt.Println("panic--recover()寰楀埌鐨勬槸string绫诲瀷") + } + err = errors.New(msg) + } + }() + defer resp.Body.Close() + { + body := &bytes.Buffer{} + _, err := body.ReadFrom(resp.Body) + if err != nil { + fmt.Println("UploadFile body.ReadForm(resp.Body) err:", err) + } + + m := make(map[string]interface{}) + if err := json.Unmarshal([]byte(body.String()), &m); err != nil { + return nil, err + } + return m,nil } } \ No newline at end of file -- Gitblit v1.8.0