要进行上传,您需要有一个文件输入和一个使用multipart/form-data enctype的表单。在服务器上,您从Request.Files集合元素中获得一个与您的输入标记名称匹配的HttpPostedFileBase对象。然后你访问文件对象上的流并读取它。
一旦你有了数据,你就可以执行你的转换 - 在这里你正在读取一个特定标签的数量。然后你想从你的动作中返回一个FileResult。由于它实际上只是一个字符串,我建议将它写入一个MemoryStream,然后倒回该字符串并从中创建一个FileResult。
<% using (Html.BeginForm("Upload","Controller",FormMethod.Post, new { enctype = "multipart/form-data"))
{ %>
<label for="uploadFile">File:</label>
<input type="file" name="uploadFile" id="uploadFile" />
<input type="submit" value="Upload" />
<% } %>
代码 - 因为我认为你最终想要做更复杂的东西,我会包含一些(未经测试/未编译)不,你描述了什么代码(我认为)。
public ActionResult Upload()
{
var file = Request.Files["uploadFile"];
if (file == null)
{
ModelState.AddModelError("uploadFile", "No file specified");
return View();
}
var reader = new StreamReader(file.InputStream);
var doc = XDocument.Load(reader);
var count = doc.Descendants().Where(n => n.Name == "basket").Count();
var output = new MemoryStream();
var writer = new StreamWriter(output);
writer.Write("{0} baskets", count);
output.Seek(0, SeekOrigin.Begin);
return File(output, "text/plain", "count.txt");
}
这太棒了!我一回到午餐时间就会尝试一下。谢谢你的帮助。 – 2009-10-31 13:46:42