c# - 通过 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;
}
}
解决方案
您的服务器磁盘可能不是导致速度变慢的原因。默认情况下,上传的文件存储在一个临时目录中,您可以CopyTo(FileStream)
像您一样使用永久保存该目录。
您可以跳过此步骤并调用IFormFile.OpenReadStream()
以获取临时文件的流,然后将其传递给LargeFileUploadTask
.
关键是,可能是上传到 OneDrive 花费的时间最多。根据您的设置,您可能希望将文件保存到队列目录中(请求完成后临时文件将被删除),并让后台服务读取该队列并将它们上传到 OneDrive。
推荐阅读
- python - 如何使用 youtube api 一次更新多个播放列表项的位置?
- python - 在 Python 中酸洗时如何保留引用
- python - 将熊猫数据框的选定列转换为列表
- python - 不能将 tf.float64 dtype 与 tfrecord 一起使用
- c++ - C ++何时在模板定义中衰减
- c++ - C++ 卷曲回调
- spring-boot - springboot使用http respose header传输:编码,但是tcp发送两个数据包即使响应很小
- python - 用seaborn制作的解包情节
- c# - 整数范围
- c++ - 在用 C++ 编写 txt 文件时无法过滤掉字符串向量