0

我一整天都在研究这个问题,并且已经进行了研究,我似乎无法在任何地方找到解决方案。我有这个在我的控制器中调用 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}

其他人有想法吗?

4

1 回答 1

0

从此代码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)
于 2021-03-11T03:43:47.550 回答