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

Используйте 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).Result;
        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;
        }
    }

person 김세림    schedule 27.10.2020    source источник


Ответы (1)


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

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

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

person CodeCaster    schedule 27.10.2020