Путь к файлу при загрузке файлов через OneDrive SDK

#c# #file-upload #microsoft-graph-api #onedrive #microsoft-graph-sdks

#c# #загрузка файла #microsoft-graph-api #onedrive #microsoft-graph-sdks

Вопрос:

Используйте OneDrive SDK для загрузки файлов.

В это время вы должны передать путь к файлу, но загрузка с использованием кода занимает много времени.

Могу ли я загружать файлы, даже если я передаю временный путь к файлу?

В настоящее время я получаю путь к файлу после сохранения файла на сервере.

В этом случае проблема возникает из-за проблем со скоростью.

Есть ли какой-нибудь способ посмотреть путь к временному файлу?

 public async Task<JObject> UploadLargeFiles(string upn, IFormFile files)
    {
        var jObject = new JObject();
        int fileSize = Convert.ToInt32(files.Length);

        var folderName = Path.Combine("wwwroot", "saveLargeFiles");
        var pathToSave = Path.Combine(System.IO.Directory.GetCurrentDirectory(), folderName);
        var fullPath = "";

        if (files.Length > 0)
        {
            var fileName = files.FileName;
            fullPath = Path.Combine(pathToSave, fileName);

            using (var stream = new FileStream(fullPath, FileMode.Create))
                files.CopyTo(stream);
        }

        var filePath = fullPath;

        var fileStream = System.IO.File.OpenRead(filePath);
        GraphServiceClient client = await MicrosoftGraphClient.GetGraphServiceClient();

        var uploadProps = new DriveItemUploadableProperties
        {
            ODataType = null,
            AdditionalData = new Dictionary<string, object>
            {
                { "@microsoft.graph.conflictBehavior", "rename" }
            }
        };

        var item = this.SelectUploadFolderID(upn).Resu<
        var uploadSession = await client.Users[upn].Drive.Items[item].ItemWithPath(files.FileName).CreateUploadSession(uploadProps).Request().PostAsync();

        int maxChunkSize = 320 * 1024;
        var uploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, fileStream, maxChunkSize);

        var response = await uploadTask.UploadAsync();

        if (response.UploadSucceeded)
        {
            return 
        }
        else
        {
            return null;
        }
    }
  

Ответ №1:

Вероятно, это замедляет работу не из-за диска вашего сервера. По умолчанию загруженные файлы хранятся во временном каталоге, который вы можете сохранить навсегда, используя CopyTo(FileStream) , как вы делаете.

Вы можете пропустить этот шаг и вызвать IFormFile.OpenReadStream() , чтобы получить поток во временный файл, а затем передать его LargeFileUploadTask .

Дело в том, что, вероятно, загрузка в OneDrive занимает наибольшее количество времени. В зависимости от ваших настроек вы можете захотеть сохранить файлы в каталоге очереди (временный файл удаляется после завершения запроса), а фоновая служба считывает эту очередь и загружает их в OneDrive.