Как загрузить файл Excel в sharepoint с python (правильный код состояния, но файл не отображается)? - PullRequest
0 голосов
/ 28 марта 2020

Я знаю, что были некоторые похожие вопросы, но ни один из них не помог мне в конце. У меня есть только очень краткое представление о том, как работает sharepoint, так что, может быть, это просто небольшая ошибка.

Во всяком случае, точно. Я должен написать python скрипт, который берет файл Excel с sharepoint, загружает его, обрабатывает, загружает снова. Обработка и загрузка частей сделаны. У меня были некоторые проблемы с аутентификацией, поэтому я сослался на этот пост Загрузите файл Sharepoint Excel в Python, и это фактически решило мою проблему.

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.utilities.request_options import RequestOptions
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
import requests

ctx_auth = AuthenticationContext("https://mydomain.sharepoint.com")
ctx_auth.acquire_token_for_user("myusername", "mypassword")
ctx = ClientContext("https://mydomain.sharepoint.com", ctx_auth)
file_path = ("https://mydomain.sharepoint.com/:x:/r/teams/team-finansielletiltakcoronakrisen/Delte%20dokumenter/Rapporter/myreport.xlsx")

options = RequestOptions(file_path)
ctx_auth.authenticate_request(options)
options.headers["X-FORMS_BASED_AUTH_ACCEPTED"] = "f"
options.headers["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0)"
response = File.open_binary(ctx, "/:x:/r/teams/team-finansielletiltakcoronakrisen/Delte%20dokumenter/Rapporter/myreport.xlsx")
req = requests.get(file_path, headers=options.headers, verify=True, allow_redirects=True)
with open("input_file.xlsx", 'wb') as file:
    file.write(req.content)

ОБРАБОТКА MAGI C

И на последнем шаге я хочу загрузить файл обратно в то же место (желательно перезаписать его. Здесь я использую те же самые заголовки, но даже если я изменяю их / аутентифицируюсь снова, чтобы использовать другое имя файла, результат остается тем же.

with open("output_file.xlsx", 'rb') as file:
    file_content = file.read()

requests.post(file_path, headers=options.headers, verify=True, allow_redirects=True,data=file_content)

==

new_file_path = ("https://mydomain.sharepoint.com/:x:/r/teams/team-finansielletiltakcoronakrisen/Delte%20dokumenter/Rapporter/test.xlsx")
options = RequestOptions(new_file_path)
ctx_auth.authenticate_request(options)
options.headers["X-FORMS_BASED_AUTH_ACCEPTED"] = "f"
options.headers["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0)"
with open("output_file.xlsx", 'rb') as file:
    file_content = file.read()
requests.post(file_path, headers=options.headers, verify=True, allow_redirects=True,data=file_content)

Код состояния в обоих случаях 200, но файл не отображается в папке sharepoint. права доступа правильные, я могу загрузить файл вручную.

На данный момент я немного невежественен, поэтому заранее спасибо за любые идеи!

С наилучшими пожеланиями!

РЕДАКТИРОВАТЬ: просто изменение метода записи, чтобы положить мне 400 вместо 200, не знаю почему.

...