2017-05-10 40 views
2

GOLANG:从谷歌排除垃圾文件的驱动器

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 } 
 
}

我使用去为我的Google云端硬盘API开发以下目不转睛版本使用率的详细信息, 去版本GO1 .8.1 windows/amd64 和进口 “google.golang.org/api/drive/v3” “google.gola ng.org/api/googleapi” 发展

为Golang上市文件,包括垃圾

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 
 
}

谷歌驱动API。 如何排除垃圾文件,

+0

您的片段仍不清楚,例如如何'self.listAllFiles'和'self.newPathfinder()'实现? – putu

+0

@putu,你能看到更新 –

+0

你可以通过['drive.File'](https://godoc.org/google.golang.org/api/drive/v3#File)过滤文件。在结构中有'Trashed'和'ExplicitlyTrashed'字段。将其设置在将传递给'Q(...)'的查询中。有关查询的更多详细信息,请参阅[搜索文件](https://developers.google.com/drive/v3/web/search-parameters) – putu

回答

0

要筛选要从Google Drive检索的文件,您需要指定搜索参数,如"Search for Files"中所述。通过它作为Q(...)参数,例如

假设你想搜索pdf文件包含myfilenot in trashed的名称。

那么代码看起来像

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