func putWrite(c rpc.Client, l rpc.Logger, ret interface{}, uptoken, key string, hasKey bool, data io.Reader, size int64, extra *PutExtra) error { var b bytes.Buffer writer := multipart.NewWriter(&b) err := writeMultipart(writer, uptoken, key, hasKey, extra) if err != nil { return err } lastLine := fmt.Sprintf("\r\n--%s--\r\n", writer.Boundary()) r := bytes.NewReader([]byte(lastLine)) bodyLen := int64(b.Len()) + size + int64(len(lastLine)) mr := io.MultiReader(&b, data, r) contentType := writer.FormDataContentType() return c.CallWith64(l, ret, UP_HOST, contentType, mr, bodyLen) }