解析上传的文件,然后将文件内容保存到数据库并显示到屏幕(网页)
本文关键字:文件 显示 数据库 屏幕 网页 保存 然后 | 更新日期: 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语句
还是你在问别的问题?