@@ -220,23 +220,45 @@ export default class GoogleDriveFileSystem implements FileSystem {
220220 folderId = foundId ;
221221 }
222222
223- // 列出目录内容
223+ // 列出目录内容,处理分页
224+ const list : File [ ] = [ ] ;
225+ let pageToken : string | undefined = undefined ;
226+
224227 const query = `'${ folderId } ' in parents and trashed=false` ;
225- const response = await this . request (
226- `https://www.googleapis.com/drive/v3/files?q=${ encodeURIComponent ( query ) } &fields=files(id,name,mimeType,size,md5Checksum,createdTime,modifiedTime)&spaces=appDataFolder`
227- ) ;
228+ const MAX_ITERATIONS = 100 ;
229+ let iterations = 0 ;
228230
229- const list : File [ ] = [ ] ;
230- if ( response . files ) {
231- for ( const item of response . files ) {
232- list . push ( {
233- name : item . name ,
234- path : this . path ,
235- size : item . size ? parseInt ( item . size , 10 ) : 0 ,
236- digest : item . md5Checksum || "" ,
237- createtime : new Date ( item . createdTime ) . getTime ( ) ,
238- updatetime : new Date ( item . modifiedTime ) . getTime ( ) ,
239- } ) ;
231+ while ( true ) {
232+ iterations += 1 ;
233+ if ( iterations > MAX_ITERATIONS ) {
234+ throw new Error ( "GoogleDrive list pagination exceeded maximum iterations" ) ;
235+ }
236+ const url = new URL ( "https://www.googleapis.com/drive/v3/files" ) ;
237+ url . searchParams . set ( "q" , query ) ;
238+ url . searchParams . set ( "fields" , "files(id,name,mimeType,size,md5Checksum,createdTime,modifiedTime),nextPageToken" ) ;
239+ url . searchParams . set ( "spaces" , "appDataFolder" ) ;
240+ if ( pageToken ) {
241+ url . searchParams . set ( "pageToken" , pageToken ) ;
242+ }
243+
244+ const response = await this . request ( url . toString ( ) ) ;
245+
246+ if ( response . files ) {
247+ for ( const item of response . files ) {
248+ list . push ( {
249+ name : item . name ,
250+ path : this . path ,
251+ size : item . size ? parseInt ( item . size , 10 ) : 0 ,
252+ digest : item . md5Checksum || "" ,
253+ createtime : new Date ( item . createdTime ) . getTime ( ) ,
254+ updatetime : new Date ( item . modifiedTime ) . getTime ( ) ,
255+ } ) ;
256+ }
257+ }
258+
259+ pageToken = response . nextPageToken ;
260+ if ( ! pageToken ) {
261+ break ;
240262 }
241263 }
242264
0 commit comments