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。
使用 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。