在MVC中上传文件并创建下载文件的链接

时间:2014-03-06 09:00:25

标签: asp.net-mvc http user-interface file-upload

我为上传文件创建了此代码。但它不会在我创建的App_Data / Uploads文件夹中上传任何文件。 这是代码>>

In view>>

<form action="~/Views/Home/_SaveUpdate" method="post" enctype="multipart/form-data">

  <label for="file1">Filename:</label>
  <input type="file" name="files" id="file1" />

  <label for="file2">Filename:</label>
  <input type="file" name="files" id="file2" />

  <input type="submit"  />
</form>

And this my Handler>>

[HttpPost]
        public ActionResult Index(IEnumerable<HttpPostedFileBase> files)
        {
            foreach (var file in files)
            {
                if (file.ContentLength > 0)
                {
                    var fileName = Path.GetFileName(file.FileName);
                    var path = Path.Combine(HttpContext.Server.MapPath("~/App_Data/Uploads"), fileName);
                    file.SaveAs(path);
                }
            }
            return RedirectToAction("Index");
        }

请告诉我还有什么需要做的。另外,如何生成链接以下载文件。

2 个答案:

答案 0 :(得分:0)

首先,表单的操作现在指向~/Views/Home/_SaveUpdate,而根据您的后操作,该操作应为/Home/Index。 其次,确保在App_Data文件夹中创建了Upload文件夹。 这应该解决上传问题。

查看:

<form action="/Home/Index" method="post" enctype="multipart/form-data">
    <label for="file1">Filename:</label>
    <input type="file" name="files" id="file1" />
    <label for="file2">Filename:</label>
    <input type="file" name="files" id="file2" />
    <input type="submit"  />
</form>

如果要显示所有上传文件的下载链接,则应将图像存储在与App_Data不同的文件夹中。出于安全原因,无法直接访问App_Data文件夹。

可以找到显示目录中文件的一个很好的示例here

答案 1 :(得分:0)

我拿了你的代码并做了一些改动来测试它......它确实有效。

对于我的测试,我刚刚更改了操作的名称。 你确定你的表格行动是否正确?

<form action="~/Views/Home/_SaveUpdate" 

因为它与处理程序的名称不匹配:

public ActionResult Index(IEnumerable ....

我的测试: 确保您的上传文件夹存在或您将获得例外。 处理程序:

        [HttpPost]
    public ActionResult FileUploadPost(IEnumerable<HttpPostedFileBase> files)
    {
        foreach (var file in files)
        {
            if (file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(HttpContext.Server.MapPath("~/Uploads"), fileName);
                file.SaveAs(path);
            }
        }
        return RedirectToAction("Index");
    }

观点:

 <form action="FileUploadPost" method="post" enctype="multipart/form-data">

        <label for="file1">Filename1:</label>
        <input type="file" name="files" id="file1" />

        <label for="file2">Filename2:</label>
        <input type="file" name="files" id="file2" />

        <input type="submit" />
    </form>