Скопируйте DriveItem, но перезаписать - PullRequest
0 голосов
/ 29 января 2020

Я хочу скопировать и перезаписать существующий файл, но не могу сделать это, не получив сообщение об ошибке AlreadyExists.

В качестве обходного пути мне кажется, что мне нужно загрузить его в поток, а затем повторно загрузить его.

Код соответствует API

await graphClient.Sites.Root.Drives[documentLibraryId].Items[fileId]
            .Copy(newFileName, parentReference)
            .Request()
            .PostAsync();

В качестве обходного пути мне, возможно, придется загрузить файл в strea, а затем загрузить его, как показано ниже, что, похоже, работает

await RetryWithExponentialBackoff.RunAsync(async () =>
        {
            uploadSession = await graphClient.Drives[driveId]
           .Root
           .ItemWithPath(filePath)
           .CreateUploadSession()
           .Request()
           .PostAsync();
        });

1 Ответ

1 голос
/ 01 февраля 2020

Обычно вам просто нужно установить microsoft.graph.conflictBehavior для замены. Это прекрасно работает с такими функциями, как перемещение . Однако Api игнорирует указанное конфликтное поведение с функцией копирования. Больше информации об ошибке здесь: ссылка на выпуск github . Похоже, что это не является приоритетом для Microsoft, поскольку об ошибке сообщалось в течение года go, и с тех пор ничего не произошло. Так что вам, скорее всего, понадобится обходной путь. Другая идея для обходного пути:

  1. Скопируйте DriveItem в целевую библиотеку документов или папку, но используйте, например, комбинацию текущей даты и идентификатора элемента диска вместо желаемого имени файла newFileName, чтобы сделать Убедитесь, что у вас нет конфликта с каким-либо существующим файлом.
  2. Измените имя скопированного DriveItem на желаемое имя файла newFileName, например:

    PATCH https://graph.microsoft.com/v1.0/sites/siteId/drives/driveId/items/itemId

    {"name": "newFileName", "@ microsoft.graph.conflictBehavior": "replace"}

    В моих тестах это заменило существующий файл именем newFileName с скопированный файл.

С этим обходным путем вам не нужно загружать и повторно загружать файл. Таким образом, производительность должна быть лучше. Однако пользователь может задаться вопросом о странных именах файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...