我有一個表單,可以輸入多個圖像文件。插入時,我可以在服務器上使用Request.Files
中的內容恢復它們,然後我將文件作爲byte[]
添加到我的模型中,並使用文件名。輸入中的返回文件
我的問題依賴於當我試圖從我的模型中恢復數據,把它放回到編輯窗體中的所有其他值成功回來,但與圖像,我不得不要求他們一個從服務器中取一個,並將其設置爲img
標記的src
屬性。
當我重新提交我的表單時,我再也沒有Request.Files
上的圖像,並且這會導致圖像從我的數據庫中被刪除而不再處於我的模型中,因爲每次我提交插入或編輯,它通過我的方法驗證Request.Files
。
我該如何保持圖像始終保持在我的表格上,或填寫<input type="file" />
?
下面是把圖像模型代碼:
private void LoadImages(Modelo.Entidades.Produto.Produto model)
{
if (Request.Files.Count == 0)
return;
var indexImages = 0;
for (var i = 0; i < Request.Files.Count; i++)
{
var result = AddImageToModell(model, Request.Files[i], indexImages);
if (result)
indexImages += 1;
}
}
private bool AddImageToModell(Modelo.Entidades.Produto.Produto model, HttpPostedFileBase imageFile, int index)
{
if (imageFile == null || imageFile.ContentLength == 0)
return false;
model.Images[index].FileName = imageFile.FileName;
using (var dest = new MemoryStream())
{
Image image = Image.FromStream(imageFile.InputStream);
imageFile.InputStream.Seek(0, SeekOrigin.Begin);
var resizeQuery = string.Format("width={0}&height={1}&crop={2}&format={3}", image.Width, image.Height, "auto", "png");
ImageBuilder.Current.Build(imageFile.InputStream, dest, new ResizeSettings(resizeQuery));
dest.Seek(0, SeekOrigin.Begin);
model.Images[index].Image = new byte[dest.Length];
dest.Read(model.Images[index].Image, 0, model.Images[index].Image.Length);
}
return true;
}
下面是將文件發送到爲img src
使用代碼:
public ActionResult Imagem(int idProduto, int item)
{
var produto = Repositorio.ComCodigo(idProduto);
if (produto == null)
return NotFound();
var imagem = produto.Imagens.Where(p => p.Item == item).FirstOrDefault().Imagem;
if (imagem == null || imagem.Length < 10)
imagem = System.IO.File.ReadAllBytes(Server.MapPath("~/Content/imagens/image-uploader-no-image.png"));
var stream = new MemoryStream(imagem);
stream.Seek(0, SeekOrigin.Begin);
return File(stream.ToArray(), "image/png");
}
在此先感謝。