Как вы загружаете видео в Google Drive, используя JS и Golang? - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь создать такой сайт, как YouTube, где вы можете загружать и передавать потоковое видео.

Я имею в виду POST a blob на внешнем интерфейсе, и после этого у меня нет Подсказка, что мне, вероятно, следует использовать пакетный диск Golang . Любое руководство приветствуется.

1 Ответ

0 голосов
/ 13 марта 2020

Google-Drive имеет REST-API, который вы можете использовать непосредственно для загрузки / выгрузки файлов .

pkg google. golang .org / api действительно упрощает это, но его документация довольно тонка на примерах. Таким образом, после включения Google Drive API в вашей целевой учетной записи, поток по существу выглядит следующим образом:

import (
        "golang.org/x/net/context"
        "golang.org/x/oauth2"
        "golang.org/x/oauth2/google"
        "google.golang.org/api/drive/v3"
        "google.golang.org/api/googleapi" // needed for googleapi.Field definition
)

// `clientIDfile` generated when enabling Drive-API on your account
b, err := ioutil.ReadFile(clientIDfile)

// see what scope is right for you: https://godoc.org/google.golang.org/api/drive/v3#pkg-constants
gscope := drive.DriveFileScope
gconfig, err := google.ConfigFromJSON(b, gscope) // returns a `*oauth2.Config`

// load/parse user (API) token (requires a one-time oath step to create/store this token file)
tok := &oauth2.Token{}
err = json.NewDecoder(tokenFileHandle).Decode(tok)

ctx := context.Background() // replace with your app context if u have one
cli, err := gconfig.Client(ctx, tok)

service, err := drive.New(cli)

Вооружившись этим дескриптором service, вы можете получить доступ к любому из документированных API накопителей, например:

folderID := "root" // replace with specific folder ID
pageSize := int64(1000)
queryString := fmt.Sprintf("mimeType != 'application/vnd.google-apps.folder' and '%s' in parents", folderID)
attrFields := googleapi.Field("nextPageToken, files(id, name, parents, md5Checksum, size, modifiedTime, mimeType)")

flistQuery := service.Files.List().
                PageSize(pageSize).
                Q(queryString).
                Fields(attrFields)

выведет список всех файлов (которые не являются папками) в вашем каталоге root, возвращая только запрошенные атрибуты.

...