2017-05-10 2 views
2

golang: ausschließen Müll-Dateien von Google Drive

type listAllFilesArgs struct { 
 
\t query  string 
 
\t fields []googleapi.Field 
 
\t sortOrder string 
 
\t maxFiles int64 
 
} 
 
type Field string

func (self *Drive) listAllFiles(args listAllFilesArgs) ([]*drive.File, error) { 
 
\t var files []*drive.File 
 
\t var pageSize int64 
 
\t if args.maxFiles > 0 && args.maxFiles < 1000 { 
 
\t \t pageSize = args.maxFiles 
 
\t } else { 
 
\t \t pageSize = 1000 
 
\t } 
 
\t controlledStop := fmt.Errorf("Controlled stop") 
 
\t err := self.service.Files.List().Q(args.query).Fields(args.fields...).OrderBy(args.sortOrder).PageSize(pageSize).Pages(context.TODO(), func(fl *drive.FileList) error { 
 
\t \t files = append(files, fl.Files...) 
 

 
\t \t // Stop when we have all the files we need 
 
\t \t if args.maxFiles > 0 && len(files) >= int(args.maxFiles) { 
 
\t \t \t return controlledStop 
 
\t \t } 
 

 
\t \t return nil 
 
\t }) 
 

 
\t if err != nil && err != controlledStop { 
 
\t \t return nil, err 
 
\t } 
 

 
\t if args.maxFiles > 0 { 
 
\t \t n := min(len(files), int(args.maxFiles)) 
 
\t \t return files[:n], nil 
 
\t } 
 

 
\t return files, nil 
 
} 
 

 
func (self *Drive) newPathfinder() *remotePathfinder { 
 
\t return &remotePathfinder{ 
 
\t \t service: self.service.Files, 
 
\t \t files: make(map[string]*drive.File), 
 
\t } 
 
}

ich für meine Google Drive api Entwicklung gehen verwende die Details Version Nutzung folgenden wre, go Version go1 .8.1 Fenster/amd64 und importiert "google.golang.org/api/drive/v3" „google.gola ng.org/api/googleapi“ für Entwicklung

err = gDrive.List(listArgs) 
 
\t if err != nil { 
 
\t \t fmt.Errorf("Failed to list files: %s", err) 
 
\t } 
 

 
func (self *Drive) List(args ListFilesArgs) (err error) { 
 
\t listArgs := listAllFilesArgs{ 
 
\t \t query:  args.Query, 
 
\t \t fields: []googleapi.Field{"nextPageToken", "files(id,name,md5Checksum,mimeType,size,createdTime,parents)"}, 
 
\t \t sortOrder: args.SortOrder, 
 
\t \t maxFiles: args.MaxFiles, 
 
\t } 
 
\t files, err := self.listAllFiles(listArgs) 
 
\t if err != nil { 
 
\t \t return fmt.Errorf("Failed to list files: %s /n", err) 
 
\t } 
 

 
\t pathfinder := self.newPathfinder() 
 

 
\t if args.AbsPath { 
 
\t \t // Replace name with absolute path 
 
\t \t for _, f := range files { 
 
\t \t \t f.Name, err = pathfinder.absPath(f) 
 
\t \t \t if err != nil { 
 
\t \t \t \t return err 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 

 
\t PrintFileList(PrintFileListArgs{ 
 
\t \t Out:   args.Out, 
 
\t \t Files:  files, 
 
\t \t NameWidth: int(args.NameWidth), 
 
\t \t SkipHeader: args.SkipHeader, 
 
\t \t SizeInBytes: args.SizeInBytes, 
 
\t }) 
 

 
\t return 
 
}

Google Drive api für Golang Dateien Auflistung Müll inklusive. Ausschließen von Papierkorbdateien,

+0

Ihr Snippet noch unklar ist, wie zum Beispiel 'self.listAllFiles' und' self.newPathfinder() 'umgesetzt wird? – putu

+0

@putu können Sie sehen, –

+0

aktualisiert Sie können die Datei filtern, indem Sie [ 'drive.File'] (https://godoc.org/google.golang.org/api/drive/v3#File). In der Struktur gibt es ein "Trash" - und ein "ExplicitlyTrashed" -Feld. Setze es in die Abfrage, die an 'Q (...)' übergeben wird. Weitere Informationen zur Abfrage finden Sie unter [Nach Dateien suchen] (https://developers.google.com/drive/v3/web/search-parameters) – putu

Antwort

0

Um Dateien zu filtern, die Sie von Google Drive abrufen möchten, müssen Sie Suchparameter angeben, wie in "Search for Files" beschrieben. Direkt als Argument Q(...), zum Beispiel

Angenommen, Sie für pdf Datei mit einem Namen suchen möchten, enthält myfile und not in trashed.

dann wird der Code aussehen

err := self.service.Files.List(). 
    Q("mimeType='application/pdf' and name contains 'myfile' and trashed=false")