【发布时间】:2019-01-26 17:56:19
【问题描述】:
我正在使用 ASP.NET Core 异步上传多个文件。一旦用户单击浏览并选择多个文件,请求就会发送到服务器。它们是同时处理的,所以调试看起来很奇怪。
我希望允许用户一次上传多个文件,但按以下方式按顺序处理它们:
File1:保存到文件系统并将有关文件的信息存储在数据库中。
File2:当 File1 中的所有内容都完成后,保存到文件系统并将有关文件的信息存储在数据库中。
File3:当 File2 中的所有内容都完成后,保存到文件系统并将有关文件的信息存储在数据库中。
我面临的问题是 File2 数据库信息依赖于 File1 中的数据,File3 数据库信息依赖于 File2 中的数据...我想调用数据库以获取上一个文件来执行此操作,但我不能,因为由于一切都在处理,它从未存在过。
我正在使用的上传器控件有一个设置:SequentialUpload。 根据描述,这个设置似乎应该有助于我想要的东西,但在调试器中它看起来仍然很奇怪,我无法按顺序处理。
启用sequentialUpload 属性后,选定的文件将 按顺序(一个接一个)处理到服务器。如果文件 上传成功或失败,下一个文件会上传 自动在此顺序上传中。
下面是我的服务器端函数的样子,不包括保存到数据库的信息,因为那是业务逻辑:
// Upload method for chunk-upload and normal upload
public IActionResult Save(IList<IFormFile> UploadFiles)
{
long size = 0;
// for normal upload
try
{
foreach (var file in UploadFiles)
{
var filename = ContentDispositionHeaderValue
.Parse(file.ContentDisposition)
.FileName
.Trim('"');
filename = hostingEnv.WebRootPath + $@"\{filename}";
size += file.Length;
if (!System.IO.File.Exists(filename))
{
using (FileStream fs = System.IO.File.Create(filename))
{
file.CopyTo(fs);
fs.Flush();
}
// LOGIC TO RETRIEVE INFO ABOUT PREVIOUSLY STORED FILE FROM DB HERE
// LOGIC TO STORE INFO ABOUT CURRENT FILE TO DB HERE
}
}
}
catch (Exception e)
{
Response.Clear();
Response.StatusCode = 204;
Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "File failed to upload";
Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = e.Message;
}
return Content("");
}
如果 File1 被处理然后我最终在客户端上的成功函数中将是完美的,然后 File2 被启动等等......相反,我总是在所有处理完成后最终在成功函数中。
【问题讨论】:
标签: c# html asp.net-mvc asp.net-core syncfusion