目前我正在分別流式傳輸 2 個多部分請求。包含作為 blob 的文件包含一個 json 文件作為 blob 的描述如何使用多部分同時上傳它們?這是運行 2 次的請求。我想在這 1 個請求中添加 2 個文件 func(c *Client) Upload(h *UploadHandle) (*PutResult, error) { bodyReader, bodySize, err := h.Read() if err != nil { return nil, fmt.Errorf("Failed to peek the body size %v", err) } if bodySize > constants.MaxDropSize { return nil, errors.New("The size of the body is to big") } pipeReader, pipeWriter := io.Pipe() writer := multipart.NewWriter(pipeWriter) errChan := make(chan error, 1) go func() { defer pipeWriter.Close() part, err := writer.CreateFormFile(h.DropRef, h.DropRef) if err != nil { errChan <- err return } _, err = io.Copy(part, bodyReader) if err == nil { err = writer.Close() } errChan <- err }() uploadUrl := fmt.Sprintf("%s/drops/upload", c.Server) req, err := http.NewRequest("POST", uploadUrl, pipeReader) if err != nil { return nil, err } req.Header.Add("Content-Type", writer.FormDataContentType()) req.Body = ioutil.NopCloser(pipeReader) resp, err := c.Do(req) if err != nil { return nil, fmt.Errorf("Failed doing request: %v", err) } defer resp.Body.Close() // Handling the error the routine may caused if err := <-errChan; err != nil { return nil, err } if resp.StatusCode != 200 { return nil, fmt.Errorf("The server responded with a status %d", resp.StatusCode) } return &PutResult{h.DropRef, bodySize}, nil}
Golang 向 http 多部分請求添加多個文件
慕的地8271018
2021-08-16 16:22:14