首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SyncFusion: SfUploader

SyncFusion: SfUploader
EN

Stack Overflow用户
提问于 2022-10-19 23:45:09
回答 1查看 45关注 0票数 0

来自SfUploader的SyncFusion组件似乎有很多很好的内置特性,但是它似乎缺少了一个关键的特性,那就是将元数据与文件一起发送。

首先,我正在使用.Net 6和Blazor。我跟随了"快速入门“,并将组件显示在屏幕上。它适当地将文件从客户端发送到服务器。我可以点击一个断点,看到文件名、内容长度等。

我和网站上的支持人员聊天,他们给我发了此链接,但也不起作用。

所以,我的问题是:有人知道如何从SfUploader组件中向“保存”调用添加自定义数据,并在服务器上访问它吗?

作为黑客,我正在考虑添加一个JSON对象,而不是文件名。请不要让我那么做。

客户代码:

代码语言:javascript
复制
@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;
    }
 }

服务器代码:

代码语言:javascript
复制
[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?");
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-10-20 17:07:55

我之前遗漏的关键位是,SelectedEventsArgs of "CurrentRequest“上有一个参数,它是标题(谢谢穆罕默德)。

此外,由于标头是基于字符串的,所以必须将"object“序列化为客户机上的字符串,并在服务器上反序列化。

这意味着我们的onFileSelect方法转化为:

代码语言:javascript
复制
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) } };
}

和控制器的方法

代码语言:javascript
复制
    [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
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74133024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档