OneDrive SDK上传文件时的文件路径

File path when uploading files through OneDrive SDK

使用 OneDrive SDK 上传文件。

这个时候要传文件路径,但是用code上传时间比较长

即使通过临时文件路径也可以上传文件吗?

目前是将文件保存到服务器后获取文件路径

在这种情况下,问题是由速度问题引起的。

有没有办法查看临时文件路径?

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;
        }
    }

您服务器的磁盘可能不是导致速度变慢的原因。默认情况下,上传的文件存储在临时目录中,您可以像您一样使用 CopyTo(FileStream) 永久保存。

您可以跳过此步骤并调用 IFormFile.OpenReadStream() 获取临时文件的流,然后将其传递给 LargeFileUploadTask

要点是,可能是上传到 OneDrive 花费的时间最多。根据您的设置,您可能希望将文件保存到队列目录中(临时文件在请求完成后被删除),并让后台服务读取该队列并将它们上传到 OneDrive。