【问题标题】:GOLANG:exclude trash files from google driveGOLANG:从谷歌驱动器中排除垃圾文件
【发布时间】:2017-05-10 07:43:35
【问题描述】:

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

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

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

		return nil
	})

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

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

	return files, nil
}

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

我正在使用 go 进行我的 googledrive api 开发,以下是版本使用的详细信息, go 版本 go1.8.1 windows/amd64 并进口 “google.golang.org/api/drive/v3” “google.golang.org/api/googleapi” 发展

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

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

	pathfinder := self.newPathfinder()

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

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

	return
}

用于 Golang 列表文件(包括垃圾)的 google drive api。 如何排除垃圾文件,

【问题讨论】:

  • 你的sn-p还不清楚,比如self.listAllFilesself.newPathfinder()是怎么实现的?
  • @putu,你能看到更新了吗
  • 您可以通过drive.File过滤文件。结构中有TrashedExplicitlyTrashed 字段。在将传递给Q(...) 的查询中设置它。有关查询的更多详细信息,请参阅Search for Files
  • 我需要在哪里指定 drive.file
  • 你能在答案部分更新同样的内容吗

标签: go google-api oauth-2.0 google-api-client


【解决方案1】:

要过滤您想从谷歌驱动器检索的文件,您需要指定搜索参数,如"Search for Files" 中所述。作为Q(...)的参数传递,例如

假设您要搜索名称包含myfilenot in trashedpdf 文件。

那么代码会是这样的

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多