解析上传的文件,然后将文件内容保存到数据库并显示到屏幕(网页)

本文关键字:文件 显示 数据库 屏幕 网页 保存 然后 | 更新日期: 2023-09-27 18:10:04

我需要添加一个上传功能。页面上的一个组件,允许您上传一个文件,其中包含电影列表和有关电影的信息,然后将其显示到屏幕(网页)并保存到数据库。

我需要帮助的部分是解析上传的csv文件的内容,并将数据保存到sql server数据库,并在屏幕上显示内容列表。我已经创建了上传函数,如下所示:

这是一个ASP。. NET MVC 4电影应用程序。

下面是我到目前为止写的:

视图:

@using (Html.BeginForm("Upload", "Movies", FormMethod.Post, new {enctype="multipart/form-data"}))
{
    <input type="file" name="File" id="File" />
    <input type="submit" name="Submit"  value="Upload" />
    <span>@ViewBag.Message</span>
}

控制器:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase File )
{
    // Verify that the user selected a file
    if (File != null && File.ContentLength > 0)
    {
        // extract only the filename
        var fileName = Path.GetFileName(File.FileName);
        // store the file inside ~/App_Data/uploads folder
        var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
        File.SaveAs(path);
        ViewBag.Message = "File uploaded successfully";
    }
    // redirect back to the index action to show the form once again
    return RedirectToAction("Index");
}

模型(数据库):

public class Movie
{
    public int ID { get; set; }
    [Required]
    public string Title { get; set; }
    //[DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }
    [Required]
    public string Genre { get; set; }
    [Range(1,100)]
    [DataType(DataType.Currency)]
    public decimal Price { get; set; }
    public bool IsCompleted { get; set; }
    [StringLength(5)]
    public string Rating { get; set; }
    public string EnterUrl { get; set; }
    //public HttpPostedFileBase Document { get; set; }
}
public class MovieDBContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }
}

解析上传的文件,然后将文件内容保存到数据库并显示到屏幕(网页)

我自己解决了问题。

因此,我所做的是删除上传函数中的部分,我将文件保存到文件夹中,并使用流阅读器将文件读取到数组中,并用逗号分隔每行,创建一个新的电影对象,然后保存到数据库,如下所示。

    public ActionResult Upload(HttpPostedFileBase File )
    {
        // Verify that the user selected a file
        if (File != null && File.ContentLength > 0)
        {
            StreamReader csvReader = new StreamReader(File.InputStream);
            {
                string inputLine = "";
                while ((inputLine = csvReader.ReadLine()) != null)
                {
                    string[] values = inputLine.Split(new Char[] { ',' });
                    Movie movie = new Movie();
                    movie.Title = values[0];
                    movie.ReleaseDate = DateTime.Parse(values[1]);
                    movie.Genre = values[2];
                    movie.Price = Decimal.Parse(values[3]);
                    db.Movies.Add(movie);
                    db.SaveChanges();
                }
                csvReader.Close();
              }
        }
       // redirect back to the index action to show the form once again
        return RedirectToAction("Index");
    } 

那么您想要将文件数据本身保存到数据库中?

如果是,请尝试使用字节数组(byte[])作为模型中的数据类型。我很确定实体框架会将其存储为varbinary(max)。

所以不是:

//public HttpPostedFileBase Document { get; set; }

设置为:

public byte[] Document { get; set; }

然后将HttpPostedFile转换为字节数组:

byte[] data;
using (Stream inputStream = model.File.InputStream)
{
    MemoryStream memoryStream = inputStream as MemoryStream;
    if (memoryStream == null)
    {
        memoryStream = new MemoryStream();
        inputStream.CopyTo(memoryStream);
    }
    data = memoryStream.ToArray();
}

然后重建并重试。请记住使用using语句

还是你在问别的问题?