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

问题描述

我已经为此工作了一整天并且已经进行了研究,我似乎无法在任何地方找到解决方案。我有这个函数在我的控制器中调用一个列表,列表需要一个 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} 中,您将其作为字符串发布,因此无法将其识别为文件。您需要使用 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) {
                
            }
        });
}

面包应该添加[FromForm]

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