从文件选择器中选择文件时出现“ C:\ fakepath \\ file.txt”问题

时间:2018-07-19 13:01:27

标签: jquery html asp.net-mvc-4

我想做一个功能,使用户可以从文件选择器中选择一个文本文件,然后它将读取文件并在读取时做一些事情... 我遇到很多问题,无法正常工作。它不会仅将正确的路径“ C:\ fakepath \ file.txt”发送回控制器。我尝试在函数中手动放置一个真实路径,并说找不到文件...我真的很卡住。 这是我的html文件:

 @using (Html.BeginForm("FilterFile", "Home",FormMethod.Post))
{
    <div>
        <input type="file" id="textFile">
    </div>
    <button id="submit-button" type="submit">Filter</button>

    <script src="~/Scripts/jquery-3.3.1.min.js"></script>
}
<script>
        $(document).ready(function () {
            $('form').submit(function () {
                $.ajax({
                    url: '@Url.Action("FilterFile")',
                    type: "POST",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify({
                        fileName: $('#textFile').val()
                    }),
                    success: function (result) {
                    },
                    error: function (result) {
                        alert("Failed");
                    }
                });
                return false;
            });
        });

这是我的控制者:

 [HttpPost]
        public JsonResult FilterFile(string fileName)
        {
            var resultMessage = "";
            try
            {
                using (var sr = new StreamReader(fileName))

                {
                    string line;

                    while ((line = sr.ReadLine()) != null)

                    {

                        if (line.Split(' ').Count() > 1)
                        {
                             var number = line.Split(' ')[0];
                            line.Replace(number, "");

                        }

                    }

                }

                resultMessage = "The task was completed successfully!!";
            }
            catch(Exception ex)
            {
                resultMessage = ex.Message;
            }
            return Json(resultMessage);

        }
    }

由于我是编程新手,如果有人能帮助我,我将非常感谢。

1 个答案:

答案 0 :(得分:1)

HttpPostedFileBase添加为该方法接收的参数。然后使用HttpPostedFileBase.InputStream()获取流。也不要使用Ajax,因为当您要发送文件数据时,它只是发送文件名。

[HttpPost]
public JsonResult FilterFile(HttpPostedFileBase file)
{
    var resultMessage = "";
    try
    {
        if (file != null && file.ContentLength > 0)
        {
            var stream = file.InputStream();

            using (var sr = new StreamReader(stream))
            {

                string line = "";
                while ((line = sr.ReadLine()) != null)
                {

                    if (line.Split(' ').Count() > 1)
                    {
                        var number = line.Split(' ')[0];
                        line.Replace(number, "");

                    }

                }

            }
        }
        resultMessage = "The task was completed successfully!!";
    } catch (Exception ex) {
        resultMessage = ex.Message;
    }
    return Json(resultMessage);
}