我想做一个功能,使用户可以从文件选择器中选择一个文本文件,然后它将读取文件并在读取时做一些事情... 我遇到很多问题,无法正常工作。它不会仅将正确的路径“ 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);
}
}
由于我是编程新手,如果有人能帮助我,我将非常感谢。
答案 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);
}