簡體   English   中英

如何從 Blazor 導入 Excel 文件?

[英]How can I import Excel-files from Blazor?

我有一個網絡應用程序。 有一個導入Excel工作簿的function。 我想導入一個或多個 52 頁(周)Excel 工作簿的內容。 我做錯了什么? 有誰能夠幫我?

  • 為什么 ContentType/ContentDisposition 是 null 參考。 我該如何解決這個問題?
  • “名稱”的內容必須是什么? 這與文件名相同嗎?
  • 服務中顯示空引用的錯誤消息: var data = JsonConvert.SerializeObject(model); .

在 razor 頁面中,您有兩個按鈕 Select 和 Import

                    <div class="d-inline">
                        <label for="file" class="btn myButtonClass">
                            selecteer
                        </label>
                        <InputFile class="btn myButtonClass"
                               id="file" multiple
                               OnChange="@OnInputFileChange" />
                    </div> 

@code
{
    ...
    private IReadOnlyList<IBrowserFile> list;

    private async Task OnInputFileChange(InputFileChangeEventArgs e)
    {
        list = e.GetMultipleFiles();

        await _JsRuntime.InvokeAsync<string>("updateList");
    }

    public async Task DoImport()
    {
        _model.MinWeek = WeekFrom;
        _model.MaxWeek = WeekTo;

        foreach (var item in list)
        {
            Stream stream = item.OpenReadStream(Int64.MaxValue);
            var file = new FormFile(stream, 0, stream.Length, "\"files\"", item.Name);
            //file.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            //file.ContentDisposition= "x-file-name";

            _model.ImportFile.Add(file);
        }

        await _listService.Import(_model);
    }

在服務中:

public async Task<string> ImportHitlijst(ImportSelectModel model)
{
    try
    {
        var data = JsonConvert.SerializeObject(model);

        HttpContent content = new StringContent(data, Encoding.UTF8, "application/json");

        var httpResponseMessage = await _httpClient.PostAsync($"api/Hitlijst/SubmitFiles", content);

        if (httpResponseMessage.IsSuccessStatusCode)
        {
            return "Saved successful";
        }

        return "Not saved";
    }
    catch (Exception ex)
    {
        string message = ex.Message;

        return "Error with message: " + message;
    }
}

...然后在 API 中:

        [HttpPost("SubmitFiles")]
        [RequestSizeLimit(long.MaxValue)]
        public async Task<IActionResult> SubmitFiles([FromForm] ImportSelectModel model)
        {
            if (model.ImportFile.Count > 0)
            {
...

我使用 model:

 public class ImportSelectModel
    {
        public int MinWeek { get; set; }
        public int MaxWeek { get; set; }
        [Required] public List<IFormFile> ImportFile { get; set; } = new();
    }

任何建議表示贊賞。 謝謝!

在此處輸入圖像描述

您必須定義 Headers 和 ContentType:

 public async Task OnInputFileChange(InputFileChangeEventArgs e)
    {
        var files = e.GetMultipleFiles(int.MaxValue);

        foreach (var file in files)
        {
            IBrowserFile uploadedFile = file;
            Stream stream = file.OpenReadStream(Int64.MaxValue);

            var formFile = new FormFile(stream, 0, stream.Length, null, file.Name)
                {
                    Headers = new HeaderDictionary(),
                    ContentType = uploadedFile.ContentType
                };

            _model.ImportFile.Add(formFile);
            Bestandnamen.Add(file.Name);
        }

        StateHasChanged();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM