文件未按Asp中的预期进行流式传输.Net Core控制器



我正在尝试将文件上传到我的onedrive,按照预期获得文件似乎没有相应地进行流式处理,有人能告诉我问题吗。

代码片段:

public async Task<IActionResult> UploadFileOnFolder(IFormFile uploadedFile, string folderName)
{
try
{
if (uploadedFile.Length > 0)
{
dynamic response;
var fileName = ContentDispositionHeaderValue.Parse(uploadedFile.FileName).FileName.Trim('"');
using var stream = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(fileName));
response =  await _graphServiceClient.Me.Drive.Items[folderName].Content
.Request()
.PutAsync<DriveItem>(stream);
ViewData["FileUploadInfo"] = response;
}
else
{
ViewData["message"] = "Sorry Upload failed! Please check your file!";
}
}
catch (Exception ex)
{
ViewData["message"] = ex.Message;
}
return RedirectToAction("RecentDirveInfo");
}

注意:我遵循这份官方文件。

我不确定APi,但我知道你正在尝试将文件名作为文件上传。您可能希望使用uploadedFile.OpenReadStream,并将其传递到PutAsync

打开读取上传文件的请求流。

using var stream = uploadedFile.OpenReadStream();
response =  await _graphServiceClient.Me.Drive.Items[folderName].Content
.Request()
.PutAsync<DriveItem>(stream);

尝试以下代码:

public async Task<IActionResult> UploadFileOnFolder(IFormFile uploadedFile, string folderName)
{
try
{
if (uploadedFile.Length > 0)
{
dynamic response;
var fileName = uploadedFile.FileName;
using var stream = uploadedFile.OpenReadStream();
response = await _graphServiceClient.Me.Drive.Root.ItemWithPath(folderName +"/" + fileName).Content.Request().PutAsync<DriveItem>(stream);

ViewData["FileUploadInfo"] = response;
}
else
{
ViewData["message"] = "Sorry check your file!";
}
}
catch (Exception ex)
{
ViewData["message"] = ex.Message;
}
return RedirectToAction("RecentDirveInfo");
}

我已经在我这边测试过了,它对我来说非常有效:

顺便说一句,在运行此代码之前,请确保您已将下面的委派权限授予您的Azure AD应用程序:

Files.ReadWrite, Files.ReadWrite.All, Sites.ReadWrite.All

最新更新