来自SfUploader的SyncFusion组件似乎有很多很好的内置特性,但是它似乎缺少了一个关键的特性,那就是将元数据与文件一起发送。
首先,我正在使用.Net 6和Blazor。我跟随了"快速入门“,并将组件显示在屏幕上。它适当地将文件从客户端发送到服务器。我可以点击一个断点,看到文件名、内容长度等。
我和网站上的支持人员聊天,他们给我发了此链接,但也不起作用。
所以,我的问题是:有人知道如何从SfUploader组件中向“保存”调用添加自定义数据,并在服务器上访问它吗?
作为黑客,我正在考虑添加一个JSON对象,而不是文件名。请不要让我那么做。
客户代码:
@page "/"
<SfUploader ID="UploadFiles">
<UploaderEvents FileSelected="onFileSelect"></UploaderEvents>
<UploaderAsyncSettings SaveUrl="api/SampleData/Save">
</UploaderAsyncSettings>
</SfUploader>
@code {
private void onFileSelect(SelectedEventArgs args)
{
args.CustomFormData = new DocumentDTO { Id = Guid.NewGuid(),
Description = "A really cool document",
Type = "WebUpload" };
}
public class DocumentDTO
{
public Guid Id { get; set; }
public string Type { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
}
}服务器代码:
[ApiController]
[Route("api/[controller]")]
public class SampleDataController : ControllerBase
{
[HttpPost("[action]")]
public async void Save(IList<IFormFile> UploadFiles)
{
foreach (var file in UploadFiles)
{
var filename = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
filename = Environment.CurrentDirectory + $@"\{filename}";
Console.WriteLine("Where's my custom Data?");
}
}
}发布于 2022-10-20 17:07:55
我之前遗漏的关键位是,SelectedEventsArgs of "CurrentRequest“上有一个参数,它是标题(谢谢穆罕默德)。
此外,由于标头是基于字符串的,所以必须将"object“序列化为客户机上的字符串,并在服务器上反序列化。
这意味着我们的onFileSelect方法转化为:
private void onFileSelect(SelectedEventArgs args)
{
List<DocumentDTO> documents = new();
foreach (var file in args.FilesData)
{
DocumentDTO document = new DocumentDTO { Id = Guid.NewGuid(), Type = "WebUpload", Description = file.Name };
documents.Add(document);
}
args.CurrentRequest = new List<object> { new { Documents = JsonSerializer.Serialize(documents) } };
}和控制器的方法
[HttpPost("[action]")] public async void Save(IList<IFormFile> UploadFiles)
{
var jsonString = Request.Headers["documents"];
var data = JsonSerializer.Deserialize<List<DocumentDTO>>(jsonString);
foreach (var file in UploadFiles)
{
//Do Stuff
}
}https://stackoverflow.com/questions/74133024
复制相似问题