上传的文件未保存到文件系统

时间:2015-05-28 21:15:55

标签: c# asp.net asp.net-mvc asp.net-mvc-5 filesystems

上下文

我正在为我正在构建的CMS创建媒体库。基本功能包括上传文件并将其存储在文件系统中。但是,它会为保存的文件创建一个id。目前我正在通过localhost构建的内容进行测试。

db.Files.Add(mediafile);添加了文件的名称,但是,它不会将图像添加到目录中。

问题

如何将发布的文件保存到目录中? (评论部分)

源代码

/Areas/Media/Controllers/FilesController.cs

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "FileId,FileName,FileURL")] File file, HttpPostedFileBase upload)
    {
        if (ModelState.IsValid)
        {
            if (upload != null && upload.ContentLength > 0)
            {
                var mediafile = new File
                {
                    FileName = Guid.NewGuid().ToString() + System.IO.Path.GetExtension(upload.FileName),
                    FileType = FileType.File
                };
                //As seen in tutorial
                //instructor.FilePaths = new List<FilePath>();
                //instructor.FilePaths.Add(photo);

                //Educated Guessing
                //db.Files = new List<File>();
                //db.Files.Add(mediafile);
            }
            db.Files.Add(file);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(file);
    }

/Areas/Media/Views/File/Create.cshtml

@using (Html.BeginForm("Create", "Files", FormMethod.Post, new { enctype = "multipart/Form-data" }))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">

        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <div class="form-group">
            <div class="control-label col-md-2">
                <label for="file">Upload Image  for Slide:</label>
            </div>
            <div class="col-md-10">
                <input type="file" name="upload" id="fileId" style="width:50%" />
            </div>

        </div>



        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

/Models/Media.cs

using System.Web;

namespace JosephMCasey.Models
{
    public enum FileType
    {
        Thumb = 1, File
    }
    public class File
    {
        [Key]
        public int FileId { get; set; }
        [StringLength(255)]
        public string FileName { get; set; }
        public FileType FileType { get; set; }
    }
}

使用资源

Mike Dot Netting

My Github Repo

2 个答案:

答案 0 :(得分:3)

使用HttpPostedFile对象的SaveAs方法:

upload.SaveAs("Path\\to\\image\\directory");

答案 1 :(得分:1)

尝试接受

HttpPostedFileWrapper 

而不是

HttpPostedFileBase 

HttpPostedFileBase是一个抽象类

您还需要实际调用

upload.SaveAs(fileName) 

由于您的数据库似乎正在保存数据库中的条目,而不是您的文件系统。