我正在使用异步上载多个文件ASP.NET核心。一旦用户单击browse并选择多个文件,请求就会被发送到服务器。它们同时被处理,所以调试看起来很奇怪。
我希望允许用户一次上载多个文件,但按以下方式按顺序处理:
文件1:保存到文件系统并在数据库中存储有关文件的信息。
文件2:当文件1中的所有内容都完成后,保存到文件系统,并将有关该文件的信息存储在数据库中。
我面临的问题是File2数据库信息依赖于File1中的数据,File3数据库信息依赖于File2的数据。。。我想调用数据库以获取前一个文件来执行此操作,但我做不到,因为由于处理一切的方式,它从未存在过。
我正在使用的上载程序控件有一个设置,名为:
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("");
}
如果文件1被处理,那么我在客户机上的success函数中结束,然后File2被启动,依此类推。。。相反,在所有处理完成后,我总是在success函数中结束。