如何将 pdf 文件传递​​给需要 IFormFile 的控制器

How to pass pdf file to Controller that requires IFormFile

我整天都在研究这个问题,并且已经做了研究,但我似乎无法在任何地方找到解决方案。我有一个在我的控制器中调用 List 的函数,该 List 需要一个 IFormFile 参数, 这是我的javascript方法

function fileUploader_uploaded(e) {
        const file = e.file;
        const fileReader = new FileReader();
        fileReader.onload = function () {
            toggleDropZoneActive($("#dropzone-external")[0], false);
            $("#dropzone-item")[0].data = fileReader.result;
        }
        fileReader.readAsDataURL(file);
        const _fileReader = new FileReader();
        var r = _fileReader.readAsBinaryString(file);

        $("#dropzone-text")[0].style.display = "none";
         $.ajax({
             url: '@Url.Action("_Index", "FileUploader")',
             data: { CFile: r},  // I'm trying to pass the pdf file here
            cache: false,
            success: function (data) {
                console.log(data);
            }
        });
    }

这是我在控制器中的列表

 public object _Index(IFormFile CFile)
            {
                if (CFile != null)
                {
                    try
                    {
                        string documentText = "";
                        using PdfDocumentProcessor documentProcessor = new PdfDocumentProcessor();
                        documentProcessor.LoadDocument(CFile.OpenReadStream());
                        documentText = documentProcessor.Text;
                        string word = @"([0-9]+.[0-9]+-[0-9]+)";
                        Regex regex = new Regex(word);
                        foreach (Match match in regex.Matches(documentText))
                        {
                            sectionsList.Add(match.Value.ToString());
                        }
                    }
                    catch
                    {
                        Response.StatusCode = 400;
                    }              
                }
                else
                {
                    _logger.LogInformation("empty");
    
                }
    
                return sectionsList;
            }

CFile 总是空的我已经尝试了不同的方式,比如传递

data: { CFile: e.file}

还有其他人知道吗?

从这段代码data: { CFile: e.file},你post它是字符串,所以它不能被识别为一个文件。您需要使用 FormData 并更改 contentType。

function fileUploader_uploaded(e) {
    const file = e.file;
    const fileReader = new FileReader();
    fileReader.onload = function () {
        toggleDropZoneActive($("#dropzone-external")[0], false);
        $("#dropzone-item")[0].data = fileReader.result;
    }
    fileReader.readAsDataURL(file);
    const _fileReader = new FileReader();
    var r = _fileReader.readAsBinaryString(file);

    $("#dropzone-text")[0].style.display = "none";

     //----------edit here---------
     var form = new FormData()
        form.append('CFile', file)
        $.ajax({
            url: '@Url.Action("_Index", "FileUploader")',
            method:'post',
            data: form,
            cache: false,
            contentType: false,
            processData: false,
            success: function (data) {
                
            }
        });
}

bakend 应添加 [FromForm]

 [HttpPost]
 public object _Index([FromForm]IFormFile CFile)