0
현재 2 개의 멀티 파트 요청을 개별적으로 스트리밍하고 있습니다. Golang이 http 멀티 파트 요청에 여러 파일 추가
- 는
- 가 BLOB에 대한 설명으로 JSON 파일이 포함 된 BLOB으로 파일을 포함
어떻게 다중와 동시에 업로드 할 수 있습니까?
이것은 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
}