لدي مطلب حيث يتعين علي تنزيل جميع الملفات بشكل متكرر من المجلد الجذر والمجلد الفرعي والمجلد الفرعي إلى Nth.
كيف يمكنني القيام بذلك؟ هل هناك طريقة لسرد المجلدات في مجلد معين؟ أيضًا ، كيف يمكنني سرد المجلدات في مكتبة المستندات الجذر؟ تضمين التغريدة
حصلت على رابط يقول إننا نسترجع المجلد بالكامل وشجرة بنية الملف باستخدام استعلام.
الإجابة الأولى لهذا الرابط: https://sharepoint.stackexchange.com/questions/159105/with-rest-recursively-retrieve-file-and-folder-directory-structure
أحاول نسخ هذا من الرابط أعلاه باستخدام واجهة برمجة التطبيقات الخاصة بك: / _api / web / Lists / GetByTitle ('Documents') / Items؟ $ select = FileLeafRef، FileRef
ولكن عندما أحاول ذلك باستخدام الكود أدناه:
folder = ctx.web.lists.get_by_title('Documents')
folder = folder.get_items('$select=FileLeafRef,FileRef')
فشل مع وجود خطأ: "كائن 'str' ليس له سمة 'حمولة'"
ما يجب القيام به؟
أهلا،
يمكنك استخدام طريقة استدعاء proc ، والتي تستدعي نفسها بشكل متكرر ، على سبيل المثال:
def printAllContents (ctx ،uableUrl):
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)
م.
... يمكنك بعد ذلك ، على سبيل المثال ، تنزيل كل ملف باستخدام ServerRelativeUrl الذي يتم طباعته ...
لقد قمت بنشر استفساري هنا : بطريقة أكثر تنظيماً.
لمعلوماتك: JSON هناك فقط لغرض التمثيل / الفهم.
لست متأكدًا مما ستحصل عليه. أعتقد أن proc التي أدرجتها مثالاً على ذلك ... يسرد بشكل متكرر جميع المجلدات / المجلدات الفرعية والملفات داخل هذه المجلدات والمجلدات الفرعية ...
مثال على تنزيل الملفات وأنت تنزل على الشجرة بشكل متكرر ...
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
بهذه الطريقة ستمنحك القائمة الكاملة التي تحتوي على المجلد الأصل والمجلدات الفرعية N ..
ومع ذلك ، هذا أبطأ من حيث الأداء.
تحيات،
منذ أن تمت الإجابة على هذا السؤال أقترح إغلاقه
التعليق الأكثر فائدة
بهذه الطريقة ستمنحك القائمة الكاملة التي تحتوي على المجلد الأصل والمجلدات الفرعية N ..
ومع ذلك ، هذا أبطأ من حيث الأداء.