MVC 3을 사용하고 있고 AjaxUpload 플러그인을 사용하여 AJAX를 사용하여 이미지를 업로드하고 있습니다. 파일 시스템에 이미지를 저장하지 않고 대신 세션 객체에 저장 한 다음 스트림을 출력하여 양식의 이미지 컨트롤을 채 웁니다. 아무도 이것을하는 방법을 아는가?ASP.NET MVC 3 미리보기 이미지
1
A
답변
1
SomeView.cshtml :
<img src="@Url.Action("/Image/Render")" />
ImageController.cs :
public ActionResult Render() {
return File((byte[])Session["Avatar"], "image/jpeg")
}
4
적 사용자 업로드를 많이있는 경우 때문에 그 (세션에서 파일을 저장)하고 싶은 이유 없음 아이디어 동시에 해당 파일을 웹 서버의 메모리에 저장하면 특히이 파일이 큰 경우이 서버를 오래 사용할 수 없습니다. 파일 시스템에 파일을 저장하는 것이 좋습니다.
어쨌든, 여기에 (읽거나 내 이전 발언에 대해 걱정하지 않은 가정) 당신이 그것을 할 수있는 방법은 다음과 같습니다 뷰 모델에서 파일 속성은 HttpPostedFileBase
[HttpPost]
public ActionResult Upload(MyViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var buffer = new byte[model.File.InputStream];
model.File.InputStream.Read(buffer, 0, buffer.Length);
Session["uploadedFile"] = buffer;
return View(model);
}
입니다.
<img src="@Url.Action("image")" alt="" />
지금은 물론 AjaxUpload plugin 당신이 할 수 있습니다 :
public ActionResult Image()
{
byte[] buffer = (byte[])Session["uploadedFile"];
return File(buffer, "image/png");
}
및
가보기에이 작업을 가리키는<img>
태그를해야합니다 : 다음이 파일을 제공하는 컨트롤러 액션을 가질 수 AJAX를 사용하여 파일을 업로드하므로 전체 페이지를 다시로드 할 필요가 없습니다. 따라서이 경우 컨트롤러 동작은 업로드 프로세스가 성공했는지 여부를 나타내는 JSON 객체를 반환하고 성공 콜백에서
<img>
태그의
src
속성을 파일을 제공 할 컨트롤러 작업으로 설정합니다.
1
몇 가지 예제 코드. 원하는대로 수정하십시오. 많은 사용자가 있다면 이미지를 세션에 넣는 것이 좋습니다. 수명이 짧거나 수명이 긴 경우 영구 저장 장치 (파일 시스템 일 수도 있음)가 있으면 db에 붙여 두는 것이 좋습니다.
public ActionResult UploadImage()
{
foreach (string imageName in Request.Files)
{
HttpPostedFileBase file = Request.Files[imageName];
if (file.ContentLength > 0)
{
BinaryReader br = new BinaryReader(file.InputStream);
byte[] content = br.ReadBytes(file.ContentLength);
Session[imageName] = content; // better to store in a db here
}
}
return View();
}
// return the image (controller action) /mycontroller/ViewImage?imageName=whatever
public FileStreamResult ViewImage(string imageName)
{
byte[] content = (byte[])Session[imageName] ; // where ever your content is stored (ideally something other than session)
MemoryStream ms = new MemoryStream(content);
return new FileStreamResult(ms, "application/octet-stream"); // set content type based on input image, it might be png, jpg, gif etc.,
}
희망이 있습니다.
관련 문제
- 1. ASP.NET 이미지 컨트롤에서 이미지 미리보기
- 2. 이미지 미리보기 이미지
- 3. ASP.Net MVC 3 다른 어셈블리의 이미지
- 4. ASP.NET MVC 미리보기 5의 ActionUrl
- 5. asp.net mvc wysiwyg 편집기 (데이터베이스 이미지 업로드/미리보기)
- 6. ASP.NET MVC 3 Asp.net MVC 3에서 데이터베이스
- 7. MVC 3 이미지 버튼
- 8. ASP.NET ScriptControl & ASP.NET MVC 3
- 9. MVC 3 (미리보기 1) Dynamic ViewModel
- 10. C# MVC 3/jQuery 미리보기 버튼 CMS
- 11. ASP.Net MVC 3 ModelState.IsValid
- 12. ASP.NET MVC 3 CSVHelper
- 13. ASP.NET MVC 3 스레딩
- 14. Asp.net MVC 3-
- 15. ASP.NET MVC 3
- 16. ASP.NET MVC 3 AuthorizeAttribute
- 17. Asp.net MVC 3
- 18. ASP.Net MVC 3 Grid
- 19. asp.net MVC 3 모델
- 20. ASP.NET MVC 3 세션
- 21. ASP.NET MVC 3 확인
- 22. ASP.Net MVC 3 Ajax
- 23. ASP.Net MVC 3 AutoMapper
- 24. EditFor [asp.net mvc 3]
- 25. Asp.net MVC 3 캐싱
- 26. asp.net mvc 3
- 27. ASP.NET MVC 3 ModelState
- 28. ASP.NET MVC 3 : EF
- 29. ASP.NET MVC 3 Url.Action는
- 30. ASP.NET MVC 3
고마워요. 세션에 대해 무슨 뜻인지 알 겠어. 사용자가 미리보기 만하기 위해 이미지를 업로드하는 경우 (현재 이미지를 삭제하기 위해 언제든지 다른 이미지를 업로드 할 수 있음) 파일 시스템이나 데이터베이스에 저장하는 것이 좋습니다. – Paul
죽은 스레드를 가져 와서 미안하지만 파일 시스템에 이미지를 저장하는 방법은 무엇입니까? ive는 여기에 대해 많은 스레드를 보았지만 그 방법을 설명하는 것은 아무것도 없습니다. 그 (또는 웹 사이트)에 다른 하위 도메인을 만들어야합니까? 그렇다면 원래 웹 사이트 서버에서 어떻게 액세스 할 수 있습니까? 그들이 말한대로 주 파일이나 그와 비슷한 것에 액세스 할 수 없어야합니다. – gdubs