أنا أستخدم عميل Python لتنزيل الملفات من مجلد SharePoint. هذا يعمل بشكل أساسي ، ومع ذلك ، فإن بعض الملفات لها أسماء غير شائعة (بأحرف خاصة) ومع تلك الملفات لا يعمل التنزيل. على سبيل المثال ، اسم ملف نموذجي سيكون Sequenz%2001.mp4#t=0.033333.jpg
- هذا غير مرمز ، اسم الملف هو بالضبط.
عندما أحاول الوصول إلى هذا الملف بهذا الاسم ، يظهر لي خطأ "لم يتم العثور على الملف". ولكن عند إعادة تسمية الملف إلى test.jpg
فإن التنزيل يعمل. أنا أتبع مثالك لتنزيل الملفات:
FILE = "/Sequenz%2001.mp4#t=0.033333.jpg" # it does work with "test.jpg" here
# Some more constants for USER, PASS, URL, etc.
ctx_auth = AuthenticationContext(URL)
if ctx_auth.acquire_token_for_user(USER, PASS):
ctx = ClientContext(URL + SITE, ctx_auth)
local_file_name = "/tmp" + FILE
try:
with open(local_file_name, "wb") as local_file:
f = ctx.web.get_file_by_server_relative_url(SITE + PATH + FILE)
f.download(local_file).execute_query()
except ClientRequestException:
print("Can't fetch remote file: " + PATH + FILE)
حاولت اقتباس اسم الملف عبر urllib.parse.quote()
واستخدمه ، لكن بنفس النتيجة.
ما الذي أحتاجه للوصول إلى مثل هذا الملف؟
haimat هل حاولت
import urllib
FILE = urllib.parse.urlencode("/Sequenz%2001.mp4#t=0.033333.jpg")
جرب urllib.parse.quote_plus
إذا لم يفلح ذلك.
xibriz شكرًا ، لكن للأسف هذا لا يحلها بالنسبة لي.
لقد حاولت باستخدام quote_plus()
، لكن لم يحالفني الحظ (الوظيفة urlencode()
مخصصة لأزواج المفاتيح / القيمة ، لذا فهي ليست لحالة الاستخدام الخاصة بي هنا).
يمكن لأي شخص إعادة إنتاج هذه المشكلة؟
haimat لقد تمكنت من إعادة إنتاج الخطأ وإصلاح المشكلة ، ولكن vgrem يشرفني التوصل إلى حل دائم.
الفصل التالي يهتم بالشخصيات الخاصة:
https://github.com/vgrem/Office365-REST-Python-Client/blob/4bf8ee0b65985980b50fc3b74b32fd2db34561ba/office365/runtime/odata/odata_path_parser.py#L6
يبدو رمز تنزيل الملفات صحيحًا:
https://github.com/vgrem/Office365-REST-Python-Client/blob/1d7f3d90c17cdbbe9d2b27990e0fe657a2100da9/office365/sharepoint/actions/download_file.py#L30
ولكن لسبب ما ، لا يتم استخدام getFileByServerRelativePath
عند تنزيل الملفات ، ولكن لا يتم استخدام getFileByServerRelativeUrl
https://github.com/vgrem/Office365-REST-Python-Client/blob/1d7f3d90c17cdbbe9d2b27990e0fe657a2100da9/office365/sharepoint/webs/web.py#L202
تغيير السطر 202 في هذا الملف إلى ResourcePathServiceOperation("getFileByServerRelativePath", [url], self.resource_path)
وإجراء التغييرات التالية على odata_path_parser.py يحل المشكلة ، لكنه ليس الحل الصحيح.
elif method_parameters is not None:
url += "(decodedurl="
تضمين التغريدة
الإصلاح / الحل الخاص بك يحل هذه المشكلة بالفعل بالنسبة لي ، يمكنني الوصول إلى الملفات الآن.
شكرا جزيلا ، لقد أنقذت يومي!
haimat أهلا وسهلا بك 😊
vgrem يجب عليك تغيير التسمية إلى خطأ