在Web应用程序中存储文件上载的位置

时间:2014-11-06 13:31:40

标签: asp.net upload asp.net-mvc-5

我使用byte[]来获取我要上传到ASP.NET网站的文件的序列化版本。我在您的视图模型上使用HttpPostedFileBase来保存上传的文件

public class MyViewModel
{
    [Required]
    public HttpPostedFileBase File { get; set; }
}

我的HomeController

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        if (!ModelState.IsValid)
            return View(model);

        byte[] uploadedFile = new byte[model.File.InputStream.Length];
        model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length);

        // Where do I write the file to?

        return Content("Upload complete");
    }
}

最后在我看来我有

@model MyViewModel
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div>
        @Html.LabelFor(x => x.File)
        @Html.TextBoxFor(x => x.File, new { type = "file" })
        @Html.ValidationMessageFor(x => x.File)
    </div>
    <button type="submit">Upload</button>
}

上传只能由我(管理员)执行,并且只有两个应用程序安装程序(.exe文件,一个8MB,另一个18MB)。我的问题是如何/在哪里可以存储上传的文件,以便用户可以下载这些文件?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

通常,您可以使用App_Data文件夹执行此操作。可以使用HttpContext.Current.Server.MapPath("~/App_Data/");访问此内容。

但是,有concerns about uploading个数据存储在Web应用程序的子文件夹中(vNext的设计可能会减少这些数据)。这些天这样的事情(用户可能想通过互联网访问)我会存储在Azure StorageS3之类的东西,这些东西有一些成本,但它是如此之低,以至于大多数都不是问题案件(每月每GB约0.0300美元)。