首页 > 解决方案 > 通过 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;
        }
    }

标签: c#file-uploadmicrosoft-graph-apionedrivemicrosoft-graph-sdks

解决方案


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

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

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


推荐阅读