[英]MVC4 Upload Image and insert into database
我几天前在MVC4 visual studio中工作。 我在这方面真的很新,希望任何人都可以帮助我。
我的网站上有一个表单,输入类型为“文本”,输入类型为“文件”。
我想在数据库中插入具有多个imageuploads的新项目。
我尝试在视图,控制器和模型中执行此操作。
我搜索了一些东西,找到了一个对上传几张图片有很大帮助的代码。
但是我想要的是,当我单击按钮时,上传所有图像并将所有其他字段的信息和所有图像的文件名插入到我的表中。 因此,我可以在另一页中选择与此ID相关联的所有图像。
希望有人可以帮助您。
这是我的代码:
提前致谢
视图:
@using (Html.BeginForm("Uploading", "AdicionarRevista", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<label for="file">Nome da Empresa:</label>
<input type="text" name="Name" id="nome" /><br />
<label for="file">Titulo da Revista:</label>
<input type="text" name="Title" id="titulo" /> <br />
<label for="file">Upload:</label>
<input type="file" name="ImageUploaded" id="btnUpload" multiple="multiple" accept="image/*" /> <br />
<button type="submit" id="Upload">Upload</button>
}
控制器:
[HttpPost]
public ActionResult Uploading(ImageModel infouploadimage)
{
for (int i = 0; i < Request.Files.Count; i++)
{
if (Request.Files[i].ContentLength > 0)
{
HttpPostedFileBase uploadedFile = Request.Files[i];
string fileName = Guid.NewGuid().ToString();
string serverPath = Server.MapPath("~");
string imagesPath = serverPath + "Content\\Images\\";
string thumsise = Path.Combine(imagesPath, "Thumb" + fileName);
string thumbPath = Path.Combine(imagesPath, "Thu" + fileName);
string fullPath = Path.Combine(imagesPath, "Full" + fileName);
string Bigpath = Path.Combine(imagesPath, "big" + fileName);
string Bigpatha = Path.Combine(imagesPath, "biga" + fileName);
string Bigpathb = Path.Combine(imagesPath, "bigb" + fileName);
string Bigpathc = Path.Combine(imagesPath, "bigc" + fileName);
ImageModel.ResizeAndSave(thumsise, fileName, uploadedFile.InputStream, 80, true);
ImageModel.ResizeAndSave(thumbPath, fileName, uploadedFile.InputStream, 100, true);
ImageModel.ResizeAndSave(fullPath, fileName, uploadedFile.InputStream, 500, true);
ImageModel.ResizeAndSave(Bigpath, fileName, uploadedFile.InputStream, 200, true);
ImageModel.ResizeAndSave(Bigpatha, fileName, uploadedFile.InputStream, 250, true);
ImageModel.ResizeAndSave(Bigpathb, fileName, uploadedFile.InputStream, 150, true);
ImageModel.ResizeAndSave(Bigpathc, fileName, uploadedFile.InputStream, 50, true);
}
}
return RedirectToAction("Index", "Home");
}
模型:
public class ImageModel
{
[Required]
public string Name{ get; set; }
public string Title{ get; set; }
public HttpPostedFileWrapper ImageUploaded { get; set; }
public static void ResizeAndSave(string savePath, string fileName, Stream imageBuffer, int maxSideSize, bool makeItSquare)
{
int newWidth;
int newHeight;
Image image = Image.FromStream(imageBuffer);
int oldWidth = image.Width;
int oldHeight = image.Height;
Bitmap newImage;
if (makeItSquare)
{
int smallerSide = oldWidth >= oldHeight ? oldHeight : oldWidth;
double coeficient = maxSideSize / (double)smallerSide;
newWidth = Convert.ToInt32(coeficient * oldWidth);
newHeight = Convert.ToInt32(coeficient * oldHeight);
Bitmap tempImage = new Bitmap(image, newWidth, newHeight);
int cropX = (newWidth - maxSideSize) / 2;
int cropY = (newHeight - maxSideSize) / 2;
newImage = new Bitmap(maxSideSize, maxSideSize);
Graphics tempGraphic = Graphics.FromImage(newImage);
tempGraphic.SmoothingMode = SmoothingMode.AntiAlias;
tempGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
tempGraphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
tempGraphic.DrawImage(tempImage, new Rectangle(0, 0, maxSideSize, maxSideSize), cropX, cropY, maxSideSize, maxSideSize, GraphicsUnit.Pixel);
}
else
{
int maxSide = oldWidth >= oldHeight ? oldWidth : oldHeight;
if (maxSide > maxSideSize)
{
double coeficient = maxSideSize / (double)maxSide;
newWidth = Convert.ToInt32(coeficient * oldWidth);
newHeight = Convert.ToInt32(coeficient * oldHeight);
}
else
{
newWidth = oldWidth;
newHeight = oldHeight;
}
newImage = new Bitmap(image, newWidth, newHeight);
}
newImage.Save(savePath + fileName + ".jpg", ImageFormat.Jpeg);
//newImage.Save(savePath + fileName + ".jpg", ImageFormat.Jpeg);
image.Dispose();
newImage.Dispose();
}
public void infouploadimage(string name, string title,string filename)
{
Name= name;
Title= title;
ImageUploaded = filename; <== ERROR HERE ALSO
string connection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
using (SqlConnection connect = new SqlConnection(connection))
{
string query = "Insert Into MYtable(Name, Title, Images) Values(@name, @title, ???)";
SqlCommand command = new SqlCommand(query, connect);
command.Parameters.AddWithValue("NomeEmpresa", n_empresa);
command.Parameters.AddWithValue("Titulo", titulo_revista);
//command.Parameters.AddWithValue("filename", ImageUploaded);
connect.Open();
command.ExecuteNonQuery();
}
}
}
首先,在控制器的POST方法中设置一个断点。 在调试时,让执行达到此断点,并验证模型是否按预期设置了所有属性。 如果不是这样,则可能存在将表单绑定到模型的问题。
另外,如果您熟悉SQL事件探查器,则可以使用它来查看是否发生了SQL插入以及是否传入了值。
我建议研究使用代码提高调试能力的方法。 也许还有一些额外的日志记录。
至于关于移动方法的评论-研究域模型模式/域驱动设计。 还要查找“反模式”“贫血域模型”(对此有些皱眉),以便您可以自行决定方法的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.