如何将文件路径返回给控制器来解析JSON文件
问题描述:
我有一个非常简单的视图,它将提示用户选择一个JSON
文件,然后解析它。如何将文件路径返回给控制器来解析JSON文件
这里是从视图中的相关代码...
@using (Html.BeginForm("AddSampleDataJSON", "Event"))
{
<input type="file" name="GetJSONFile" /><br>
<input type="submit" />
}
这里是从控制器的方法:
[HttpPost]
public ActionResult AddSampleDataJSON(FormCollection form)
{
string path = ??
using (StreamReader r = new StreamReader(path))
{
string json = r.ReadToEnd();
List<Event> events =
JsonConvert.DeserializeObject<List<Event>>(json);
}
return View();
}
接下来的问题是如何访问的完整路径,所以我可以发送到StreamReader
最终解析JSON
。我在FormCollection
对象中看不到它。
答
您将无法访问该文件的客户端路径。你只会看到文件名。
您应该编码设置为multipart/form-data
在您的视图:
@using (Html.BeginForm("AddSampleDataJSON", "Event", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="uploadedFile" /><br>
<input type="submit" />
}
而在你的控制器的输入参数更改为HttpPostedFileBase,与参数名称是一样的形式name
参数:
[HttpPost]
public ActionResult AddSampleDataJSON(HttpPostedFileBase uploadedFile)
{
using (StreamReader r = new StreamReader(uploadedFile.InputStream))
{
string json = r.ReadToEnd();
List<Event> events = JsonConvert.DeserializeObject<List<Event>>(json);
}
return View();
}
+0
优秀,工作! – user1327418
由于安全原因(浏览器仅发送文件名并且不公开使用文件系统),您不能这么做。你的参数需要是'HttpPostedFileBase GetJSONFile',它将被填充文件内容。你需要在窗体标签 –
中设置'enctype =“multipart/form-data”'属性作为进入该方法的参数?即使在添加了该属性后,它仍为空。而我选择的文件确实是一个JSON文件。 – user1327418
然后你没有正确设置它。 (并且它没有区别它是什么类型的文件) –