아래 첫 번째 문제가 해결되었지만 실제 파일을 서버에 저장할 때 사용했던 코드의 이미지 크기를 다시 조정할 수 있어야합니다. . 이제는 이 데이터베이스에 저장되어 작동하지 않습니다.이미지를 데이터베이스로 다시 저장
내 코드에서 볼 수 있듯이 다시 조정 된 이미지를 InputStream에 전달하지 않고 원본 파일을 전달합니다. newImage를 다른 유형의 것으로서 어떤 식 으로든 전달할 수 있습니다.
데이터베이스에서 이미지를 저장/검색하는 데 실제적인 문제가 있습니다. 처음에는 이미지를 업로드하고 필요한 크기로 크기를 조정하고 실제 파일로 저장할 수있는 코드가있었습니다. 하지만 지금은 이미지를 데이터베이스 (MS SQL)에 저장해야합니다.
나는 MVC2 .NET을 사용하고 3.5
내 코드가 다른 이미지의 매쉬업의 비트가 나와 있으므로 맨손으로 업로드됩니다 :) 여기
업로드은 컨트롤러 :public int InsertImageDataBlob(TempImageUpload tempImageUpload)
{
int ReturnedPhotoId;
try
{
var phototempdata = new Photo
{
ImageData = tempImageUpload.TempImageData,
contentType = tempImageUpload.ContentType,
dateUploaded = DateTime.Now
};
_db.Photos.InsertOnSubmit(phototempdata);
Save();
ReturnedPhotoId = phototempdata.id;
return ReturnedPhotoId;
}
catch (Exception ex)
{
//ErrorLogging;
}
return 0;
}
그리고 이미지 데이터 :
[HttpPost]
public ActionResult ImageUpload(HttpPostedFileBase fileBase, PhotoViewModel photoViewModel)
{
if (photoViewModel.Button == "Upload")
{
photoViewModel.ImageValid = "Valid";
ImageService imageService = new ImageService();
if (fileBase != null && fileBase.ContentLength > 0 && fileBase.ContentLength <= 2097152 && fileBase.ContentType.Contains("image/"))
{
Path.GetExtension(fileBase.ContentType);
var extension = Path.GetExtension(fileBase.FileName);
if (extension.ToLower() != ".jpg" && extension.ToLower() != ".gif") // only allow these types
{
photoViewModel.ImageValid = "Not Valid";
ModelState.AddModelError("Photo", "Wrong Image Type");
return View(photoViewModel);
}
EncoderParameters encodingParameters = new EncoderParameters(1);
encodingParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L); // Set the JPG Quality percentage
ImageCodecInfo jpgEncoder = imageService.GetEncoderInfo("image/jpeg");
var uploadedimage = Image.FromStream(fileBase.InputStream, true, true);
Bitmap originalImage = new Bitmap(uploadedimage);
Bitmap newImage = new Bitmap(originalImage, 274, 354);
Graphics g = Graphics.FromImage(newImage);
g.InterpolationMode = InterpolationMode.HighQualityBilinear;
g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
var streamLarge = new MemoryStream();
newImage.Save(streamLarge, jpgEncoder, encodingParameters);
var fileExtension = Path.GetExtension(extension);
string newname;
if (photoViewModel.photoURL != null)
{
newname = photoViewModel.photoURL;
}
else
{
newname = Guid.NewGuid() + fileExtension;
}
//changed this up now, so it stores the image in db as apposed to physical path
photoViewModel.photo = newname;
photoViewModel.ContentType = fileBase.ContentType;
Int32 length = fileBase.ContentLength;
byte[] tempImage = new byte[length];
fileBase.InputStream.Read(tempImage, 0, length);
photoViewModel.ImageData = tempImage;
TempImageUpload tempImageUpload = new TempImageUpload();
tempImageUpload.TempImageData = tempImage;
tempImageUpload.ContentType = photoViewModel.ContentType;
photoViewModel.TempImageId = _service.InsertImageDataBlob(tempImageUpload);
originalImage.Dispose();
streamLarge.Dispose();
return View(photoViewModel);
}
if (fileBase != null)
{
if (fileBase.ContentLength > 0) ModelState.AddModelError("Photo", "Image size too small");
if (fileBase.ContentLength <= 2097152) ModelState.AddModelError("Photo", "Image size too big");
if (fileBase.ContentType.Contains("image/")) ModelState.AddModelError("Photo", "Wrong Image Type");
}
else ModelState.AddModelError("Photo", "Please upload a image");
if (!ModelState.IsValid)
{
photoViewModel.ImageValid = "Not Valid";
return View(photoViewModel);
}
}
return View(photoViewModel);
}
여기 내 저장소 클래스의 데이터베이스의 필드 (이미지 유형)에 데이터가 채워집니다.
모든 도움을 주시면 감사하겠습니다. 점차 회색으로 갈 것입니다 !!
감사
아마
이 http://stackoverflow.com/questions/880515/display-image-from-database-in-asp-mvc – maztt
통해 간 : 나는 실제로이 코드와 함께 작동하도록 있어요 .InputStream.Seek (0, SeekOrigin.Begin);'b efore'fileBase.InputStream.Read (tempImage, 0, length);'문장? –
동일한 스트림에서 두 번 읽는 중입니다. 빈 바이트를 저장하는 DB에있을 수 있습니다. –