Saya memiliki persyaratan di mana saya harus mengunduh semua file secara rekursif dari folder root, subfolder dan sub dari subfolder ke N.
Bagaimana saya bisa melakukannya? Apakah ada metode untuk membuat daftar folder di folder tertentu? Juga, bagaimana saya bisa membuat daftar folder di pustaka dokumen root? @vgrem @Bachatero
Punya tautan, yang mengatakan kami mengambil seluruh folder dan pohon struktur file menggunakan kueri.
Jawaban pertama dari tautan ini: https://sharepoint.stackexchange.com/questions/159105/with-rest-recursively-retrieve-file-and-folder-directory-structure
Saya mencoba mereplikasi ini dari tautan di atas menggunakan api Anda: / _api / web / List / GetByTitle ('Documents') / Items? $ Select = FileLeafRef, FileRef
Tetapi ketika saya mencoba ini menggunakan kode di bawah ini:
folder = ctx.web.lists.get_by_title('Documents')
folder = folder.get_items('$select=FileLeafRef,FileRef')
Gagal dengan kesalahan: "objek 'str' tidak memiliki atribut 'payload'"
Apa yang harus dilakukan?
Hai,
Anda mungkin menggunakan pendekatan memanggil proc, yang secara rekursif memanggil dirinya sendiri, misalnya:
def printAllContents (ctx, relativeUrl):
try:
libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
ctx.load(libraryRoot)
ctx.execute_query()
folders = libraryRoot.folders
ctx.load(folders)
ctx.execute_query()
for myfolder in folders:
print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])
files = libraryRoot.files
ctx.load(files)
ctx.execute_query()
for myfile in files:
#print("File name: {0}".format(myfile.properties["Name"]))
print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
except:
print('Problem printing out list of folders')
sys.exit(1)
m.
... Anda kemudian dapat, misalnya, mengunduh setiap file menggunakan ServerRelativeUrl yang akan dicetak ...
Saya memposting pertanyaan saya di sini : dengan cara yang lebih terstruktur.
FYI: JSON di sana hanya untuk tujuan representasi / pemahaman.
Saya tidak yakin apa yang Anda maksud. Saya pikir proc yang saya cantumkan contoh hanya melakukan itu ... secara rekursif mencantumkan semua folder / subfolder dan file di dalam folder dan subfolder ini ...
Contoh mengunduh file saat Anda menuruni pohon secara rekursif ...
outputDir = "d:\output"
def printAllContents(ctx, relativeUrl):
try:
libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
ctx.load(libraryRoot)
ctx.execute_query()
folders = libraryRoot.folders
ctx.load(folders)
ctx.execute_query()
for myfolder in folders:
#print("Folder name: {0}".format(myfolder.properties["Name"]))
print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])
files = libraryRoot.files
ctx.load(files)
ctx.execute_query()
for myfile in files:
print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
pathList = myfile.properties["ServerRelativeUrl"].split('/')
fileDest = outputDir + "/"+ pathList[-1]
downloadFile(ctx, fileDest, myfile.properties["ServerRelativeUrl"])
except:
print('Problem printing out list of folders')
sys.exit(1)
folder_list = []
def get_folder_relativeUrl(context, folder_relativeUrl):
libraryRoot = context.web.get_folder_by_server_relative_url(folder_relativeUrl)
folders = libraryRoot.folders
context.load(folders)
context.execute_query()
for cur_folder in folders:
folder_list.append(cur_folder.properties["ServerRelativeUrl"])
get_folder_relativeUrl(context, cur_folder.properties["ServerRelativeUrl"])
return folder_list
cara ini akan memberi Anda daftar datar berisi folder Induk dan sub folder N ..
Namun, ini lebih lambat dalam hal kinerja.
Salam pembuka,
karena pertanyaan ini telah dijawab, saya mengusulkan untuk menutupnya
Komentar yang paling membantu
cara ini akan memberi Anda daftar datar berisi folder Induk dan sub folder N ..
Namun, ini lebih lambat dalam hal kinerja.